diff --git a/runtime/pb/wire.lua b/runtime/pb/wire.lua index 62e82c4a489a821201ed9a450c35096f6ddb1e70..a6150a66aa4ecc5b0c98d604106b497b0c73ceda 100644 --- a/runtime/pb/wire.lua +++ b/runtime/pb/wire.lua @@ -138,11 +138,15 @@ local function decode_tag(buf, pos) local b = buf:byte(pos) if b == nil then error("truncated varint at offset " .. pos, 0) end if b < 0x80 then - return bit.rshift(b, 3), bit.band(b, 7), pos + 1 + local wt = bit.band(b, 7) + if wt >= 6 then error("illegal wire type " .. wt, 0) end + return bit.rshift(b, 3), wt, pos + 1 end local v, npos = decode_varint(buf, pos) v = tonumber(v) - return bit.rshift(v, 3), bit.band(v, 7), npos + local wt = bit.band(v, 7) + if wt >= 6 then error("illegal wire type " .. wt, 0) end + return bit.rshift(v, 3), wt, npos end M.decode_tag = decode_tag diff --git a/test/conformance/known_failures.txt b/test/conformance/known_failures.txt index 4d6465b4c719ad7ea870d5e8de65d1fd807fea59..e15f5793a5132a4e5a82340d6394ec32a927c14a 100644 --- a/test/conformance/known_failures.txt +++ b/test/conformance/known_failures.txt @@ -80,29 +80,5 @@ Required.Proto3.ProtobufInput.PrematureEofInsideUnknownValue.FLOAT Required.Proto3.ProtobufInput.PrematureEofInsideUnknownValue.SFIXED32 Required.Proto3.ProtobufInput.PrematureEofInsideUnknownValue.SFIXED64 Required.Proto3.ProtobufInput.RepeatedScalarMessageMerge.ProtobufOutput -Required.Proto3.ProtobufInput.UnknownWireType6_Field1_Version0 -Required.Proto3.ProtobufInput.UnknownWireType6_Field1_Version1 -Required.Proto3.ProtobufInput.UnknownWireType6_Field1_Version2 -Required.Proto3.ProtobufInput.UnknownWireType6_Field1_Version3 -Required.Proto3.ProtobufInput.UnknownWireType6_Field2_Version0 -Required.Proto3.ProtobufInput.UnknownWireType6_Field2_Version1 -Required.Proto3.ProtobufInput.UnknownWireType6_Field2_Version2 -Required.Proto3.ProtobufInput.UnknownWireType6_Field2_Version3 -Required.Proto3.ProtobufInput.UnknownWireType6_Field3_Version0 -Required.Proto3.ProtobufInput.UnknownWireType6_Field3_Version1 -Required.Proto3.ProtobufInput.UnknownWireType6_Field3_Version2 -Required.Proto3.ProtobufInput.UnknownWireType6_Field3_Version3 -Required.Proto3.ProtobufInput.UnknownWireType7_Field1_Version0 -Required.Proto3.ProtobufInput.UnknownWireType7_Field1_Version1 -Required.Proto3.ProtobufInput.UnknownWireType7_Field1_Version2 -Required.Proto3.ProtobufInput.UnknownWireType7_Field1_Version3 -Required.Proto3.ProtobufInput.UnknownWireType7_Field2_Version0 -Required.Proto3.ProtobufInput.UnknownWireType7_Field2_Version1 -Required.Proto3.ProtobufInput.UnknownWireType7_Field2_Version2 -Required.Proto3.ProtobufInput.UnknownWireType7_Field2_Version3 -Required.Proto3.ProtobufInput.UnknownWireType7_Field3_Version0 -Required.Proto3.ProtobufInput.UnknownWireType7_Field3_Version1 -Required.Proto3.ProtobufInput.UnknownWireType7_Field3_Version2 -Required.Proto3.ProtobufInput.UnknownWireType7_Field3_Version3 Required.Proto3.ProtobufInput.ValidDataOneof.MESSAGE.Merge.ProtobufOutput Required.Proto3.TimestampProtoNegativeNanos.JsonOutput