M runtime/pb/wire.lua => runtime/pb/wire.lua +14 -4
@@ 446,15 446,25 @@ local function skip_field(buf, pos, wire_type)
local _, npos = decode_varint(buf, pos)
return npos
elseif wire_type == M.WIRE_I64 then
- return pos + 8
+ local np = pos + 8
+ if np > #buf + 1 then error("truncated I64 at offset " .. pos, 0) end
+ return np
elseif wire_type == M.WIRE_LEN then
local b = buf:byte(pos)
if b == nil then error("truncated varint at offset " .. pos, 0) end
- if b < 0x80 then return pos + 1 + b end
+ if b < 0x80 then
+ local np = pos + 1 + b
+ if np > #buf + 1 then error("truncated LEN at offset " .. pos, 0) end
+ return np
+ end
local len, npos = decode_varint(buf, pos)
- return npos + tonumber(len)
+ local np = npos + tonumber(len)
+ if np > #buf + 1 then error("truncated LEN at offset " .. pos, 0) end
+ return np
elseif wire_type == M.WIRE_I32 then
- return pos + 4
+ local np = pos + 4
+ if np > #buf + 1 then error("truncated I32 at offset " .. pos, 0) end
+ return np
end
error("unknown wire type " .. tostring(wire_type), 0)
end
M test/conformance/known_failures.txt => test/conformance/known_failures.txt +0 -15
@@ 54,21 54,6 @@ Required.Proto3.ProtobufInput.BadTag_OverlongVarint
Required.Proto3.ProtobufInput.IllegalZeroFieldNum_Case_0
Required.Proto3.ProtobufInput.IllegalZeroFieldNum_Case_1
Required.Proto3.ProtobufInput.IllegalZeroFieldNum_Case_3
-Required.Proto3.ProtobufInput.PrematureEofBeforeUnknownValue.DOUBLE
-Required.Proto3.ProtobufInput.PrematureEofBeforeUnknownValue.FIXED32
-Required.Proto3.ProtobufInput.PrematureEofBeforeUnknownValue.FIXED64
-Required.Proto3.ProtobufInput.PrematureEofBeforeUnknownValue.FLOAT
-Required.Proto3.ProtobufInput.PrematureEofBeforeUnknownValue.SFIXED32
-Required.Proto3.ProtobufInput.PrematureEofBeforeUnknownValue.SFIXED64
-Required.Proto3.ProtobufInput.PrematureEofInDelimitedDataForUnknownValue.BYTES
-Required.Proto3.ProtobufInput.PrematureEofInDelimitedDataForUnknownValue.MESSAGE
-Required.Proto3.ProtobufInput.PrematureEofInDelimitedDataForUnknownValue.STRING
-Required.Proto3.ProtobufInput.PrematureEofInsideUnknownValue.DOUBLE
-Required.Proto3.ProtobufInput.PrematureEofInsideUnknownValue.FIXED32
-Required.Proto3.ProtobufInput.PrematureEofInsideUnknownValue.FIXED64
-Required.Proto3.ProtobufInput.PrematureEofInsideUnknownValue.FLOAT
-Required.Proto3.ProtobufInput.PrematureEofInsideUnknownValue.SFIXED32
-Required.Proto3.ProtobufInput.PrematureEofInsideUnknownValue.SFIXED64
Required.Proto3.ProtobufInput.RepeatedScalarMessageMerge.ProtobufOutput
Required.Proto3.ProtobufInput.ValidDataOneof.MESSAGE.Merge.ProtobufOutput
Required.Proto3.TimestampProtoNegativeNanos.JsonOutput