encoding/json: fix leak when string is unmarshalled into non-string field

Fixes #4391
This commit is contained in:
Laytan Laats
2024-12-01 11:54:50 +11:00
committed by flysand7
parent cded6b8479
commit f56ac466c3
+10 -5
View File
@@ -312,13 +312,18 @@ unmarshal_value :: proc(p: ^Parser, v: any) -> (err: Unmarshal_Error) {
case .String: case .String:
advance_token(p) advance_token(p)
str := unquote_string(token, p.spec, p.allocator) or_return str := unquote_string(token, p.spec, p.allocator) or_return
if unmarshal_string_token(p, any{v.data, ti.id}, str, ti) { dest := any{v.data, ti.id}
return nil if !unmarshal_string_token(p, dest, str, ti) {
delete(str, p.allocator)
return UNSUPPORTED_TYPE
} }
delete(str, p.allocator)
return UNSUPPORTED_TYPE
switch destv in dest {
case string, cstring:
case: delete(str, p.allocator)
}
return nil
case .Open_Brace: case .Open_Brace:
return unmarshal_object(p, v, .Close_Brace) return unmarshal_object(p, v, .Close_Brace)