Fixed upb encoder for field numbers > 2**28.

The encoder was improperly sign-extending the tag to 64 bits.
pull/13171/head
Joshua Haberman 4 years ago
parent 31b3528424
commit 6c30b5fe73
  1. 4
      tests/bindings/lua/test.proto
  2. 8
      tests/bindings/lua/test_upb.lua
  3. 3
      upb/encode.c

@ -22,3 +22,7 @@ message UnpackedTest {
repeated fixed32 f32_packed = 4 [packed = false];
repeated fixed64 f64_packed = 5 [packed = false];
}
message TestLargeFieldNumber {
optional int32 i32 = 456214797;
}

@ -706,6 +706,14 @@ function test_encode_depth_limit()
assert_error(function() upb.encode(msg) end)
end
function test_large_field_number()
local msg = upb_test.TestLargeFieldNumber()
msg.i32 = 5
local serialized = upb.encode(msg)
local msg2 = upb.decode(upb_test.TestLargeFieldNumber, serialized)
assert_equal(msg.i32, msg2.i32)
end
function test_gc()
local top = test_messages_proto3.TestAllTypesProto3()
local n = 100

@ -134,7 +134,8 @@ static void encode_float(upb_encstate *e, float d) {
encode_fixed32(e, u32);
}
static void encode_tag(upb_encstate *e, int field_number, int wire_type) {
static void encode_tag(upb_encstate *e, uint32_t field_number,
uint8_t wire_type) {
encode_varint(e, (field_number << 3) | wire_type);
}

Loading…
Cancel
Save