summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaul Yang <TeBoring@users.noreply.github.com>2018-03-07 10:03:03 -0800
committerGitHub <noreply@github.com>2018-03-07 10:03:03 -0800
commit10ae4951fba613067fe4bb967bbd6093d77bdc98 (patch)
tree2d30149938306389b465ef2a0f0ecf7953c109ea
parenta66159a384dba6273ebdfd04ce6623d4b7e0a75e (diff)
parent8c6d0e5545f116be2f7fad3b5525f4eec01cfbba (diff)
Merge pull request #97 from TeBoring/php-change
Conversion from uint64 to uint32 didn't consider sign bit.
-rw-r--r--upb/encode.c6
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);
generated by cgit on debian on lair
contact matthew@masot.net with questions or feedback