@@ 364,7 364,10 @@ local function decode_enum(enum_desc, v)
local n = enum_desc.by_name[v]
if n ~= nil then return n end
end
- return tonumber(v) or v
+ -- proto3 JSON: unrecognized integer enum values pass through; unrecognized
+ -- string names yield nil so the caller can drop the element (repeated/map)
+ -- or fall back to the field default (singular).
+ return tonumber(v)
end
local function decode_field_value(field, v)
@@ 518,15 521,23 @@ decode_message = function(desc, v)
if f.kind == 'map' then
local m = {}
for mk, mv in pairs(jv) do
- m[decode_map_key(f.key, mk)] = decode_field_value(f.value, mv)
+ local dv = decode_field_value(f.value, mv)
+ if dv ~= nil then
+ m[decode_map_key(f.key, mk)] = dv
+ end
end
out[f.name] = m
elseif f.repeated then
local arr = {}
- for i = 1, #jv do arr[i] = decode_field_value(f, jv[i]) end
+ local n = 0
+ for i = 1, #jv do
+ local dv = decode_field_value(f, jv[i])
+ if dv ~= nil then n = n + 1; arr[n] = dv end
+ end
out[f.name] = arr
else
- out[f.name] = decode_field_value(f, jv)
+ local dv = decode_field_value(f, jv)
+ if dv ~= nil then out[f.name] = dv end
end
end
-- Unknown JSON keys are silently ignored (per spec).
@@ 19,11 19,6 @@
#
# Re-generate this file after fixes via `just conformance-refresh-failures`.
Recommended.Proto3.JsonInput.FieldNameWithDoubleUnderscores.ProtobufOutput
-Recommended.Proto3.JsonInput.IgnoreUnknownEnumStringValueInMapPart.ProtobufOutput
-Recommended.Proto3.JsonInput.IgnoreUnknownEnumStringValueInMapValue.ProtobufOutput
-Recommended.Proto3.JsonInput.IgnoreUnknownEnumStringValueInOptionalField.ProtobufOutput
-Recommended.Proto3.JsonInput.IgnoreUnknownEnumStringValueInRepeatedField.ProtobufOutput
-Recommended.Proto3.JsonInput.IgnoreUnknownEnumStringValueInRepeatedPart.ProtobufOutput
Recommended.Proto3.JsonInput.NullValueInOtherOneofOldFormat.Validator
Recommended.Proto3.ProtobufInput.RejectInvalidUtf8.String.MapKey
Recommended.Proto3.ProtobufInput.RejectInvalidUtf8.String.MapValue