diff options
author | Paul Yang <TeBoring@users.noreply.github.com> | 2018-03-07 10:03:03 -0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-03-07 10:03:03 -0800 |
commit | 10ae4951fba613067fe4bb967bbd6093d77bdc98 (patch) | |
tree | 2d30149938306389b465ef2a0f0ecf7953c109ea | |
parent | a66159a384dba6273ebdfd04ce6623d4b7e0a75e (diff) | |
parent | 8c6d0e5545f116be2f7fad3b5525f4eec01cfbba (diff) |
Merge pull request #97 from TeBoring/php-change
Conversion from uint64 to uint32 didn't consider sign bit.
-rw-r--r-- | upb/encode.c | 6 |
1 files changed, 4 insertions, 2 deletions
diff --git a/upb/encode.c b/upb/encode.c index a582a2f..f01ad0c 100644 --- a/upb/encode.c +++ b/upb/encode.c @@ -196,9 +196,10 @@ do { ; } while(0) case UPB_DESCRIPTOR_TYPE_UINT64: VARINT_CASE(uint64_t, *ptr); case UPB_DESCRIPTOR_TYPE_UINT32: + VARINT_CASE(uint32_t, *ptr); case UPB_DESCRIPTOR_TYPE_INT32: case UPB_DESCRIPTOR_TYPE_ENUM: - VARINT_CASE(uint32_t, *ptr); + VARINT_CASE(int32_t, (int64_t)*ptr); case UPB_DESCRIPTOR_TYPE_BOOL: VARINT_CASE(bool, *ptr); case UPB_DESCRIPTOR_TYPE_SINT32: @@ -276,9 +277,10 @@ static bool upb_encode_scalarfield(upb_encstate *e, const char *field_mem, case UPB_DESCRIPTOR_TYPE_UINT64: CASE(uint64_t, varint, UPB_WIRE_TYPE_VARINT, val); case UPB_DESCRIPTOR_TYPE_UINT32: + CASE(uint32_t, varint, UPB_WIRE_TYPE_VARINT, val); case UPB_DESCRIPTOR_TYPE_INT32: case UPB_DESCRIPTOR_TYPE_ENUM: - CASE(uint32_t, varint, UPB_WIRE_TYPE_VARINT, val); + CASE(int32_t, varint, UPB_WIRE_TYPE_VARINT, (int64_t)val); case UPB_DESCRIPTOR_TYPE_SFIXED64: case UPB_DESCRIPTOR_TYPE_FIXED64: CASE(uint64_t, fixed64, UPB_WIRE_TYPE_64BIT, val); |