From ccb2f8ab8727315b6b520cbdf1ea3a5501f4e1db Mon Sep 17 00:00:00 2001 From: Josh Haberman Date: Thu, 24 Oct 2013 13:09:41 -0700 Subject: Fixes to make the open-source build compile on Linux. --- upb/pb/compile_decoder.c | 4 +++- upb/pb/compile_decoder_x64.c | 2 ++ upb/pb/decoder.c | 4 ++++ 3 files changed, 9 insertions(+), 1 deletion(-) (limited to 'upb') diff --git a/upb/pb/compile_decoder.c b/upb/pb/compile_decoder.c index c86a171..200eef5 100644 --- a/upb/pb/compile_decoder.c +++ b/upb/pb/compile_decoder.c @@ -623,7 +623,7 @@ static void compile_method(compiler *c, upb_pbdecodermethod *method) { break; default: { opcode parse_type = (opcode)type; - assert(parse_type >= 0 && parse_type <= OP_MAX); + assert((int)parse_type >= 0 && parse_type <= OP_MAX); upb_selector_t sel = getsel(f, upb_handlers_getprimitivehandlertype(f)); int wire_type = native_wire_types[upb_fielddef_descriptortype(f)]; if (upb_fielddef_isseq(f)) { @@ -762,6 +762,7 @@ static void sethandlers(upb_pbdecoderplan *p, upb_handlers *h, bool allowjit) { static bool bind_dynamic(bool allowjit) { // Bytecode handlers never bind statically. + UPB_UNUSED(allowjit); return true; } @@ -797,6 +798,7 @@ upb_string_handler *upb_pbdecoderplan_jitcode(const upb_pbdecoderplan *p) { #ifdef UPB_USE_JIT_X64 return p->jit_code; #else + UPB_UNUSED(p); assert(false); return NULL; #endif diff --git a/upb/pb/compile_decoder_x64.c b/upb/pb/compile_decoder_x64.c index 214ab35..4659716 100644 --- a/upb/pb/compile_decoder_x64.c +++ b/upb/pb/compile_decoder_x64.c @@ -280,7 +280,9 @@ void upb_pbdecoder_jit(upb_pbdecoderplan *plan) { void upb_pbdecoder_freejit(upb_pbdecoderplan *plan) { if (!plan->jit_code) return; if (plan->dl) { +#ifdef UPB_JIT_LOAD_SO dlclose(plan->dl); +#endif } else { munmap(plan->jit_code, plan->jit_size); } diff --git a/upb/pb/decoder.c b/upb/pb/decoder.c index 0cfb12e..70862d5 100644 --- a/upb/pb/decoder.c +++ b/upb/pb/decoder.c @@ -333,6 +333,10 @@ FORCEINLINE int32_t decode_v32(upb_pbdecoder *d, uint32_t *u32) { if (ret >= 0) return ret; if (u64 > UINT32_MAX) { seterr(d, "Unterminated 32-bit varint"); + // TODO(haberman) guarantee that this function return is >= 0 somehow, + // so we know this path will always be treated as error by our caller. + // Right now the size_t -> int32_t can overflow and produce negative values. + *u32 = 0; return upb_pbdecoder_suspend(d); } *u32 = u64; -- cgit v1.2.3