From cfa3765d50347647606be9468da549ce54347018 Mon Sep 17 00:00:00 2001 From: Rickard Andersson Date: Mon, 2 Oct 2023 15:10:12 +0300 Subject: [PATCH] fix: guard against empty key value in `parse_object_body` --- core/encoding/json/parser.odin | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/core/encoding/json/parser.odin b/core/encoding/json/parser.odin index aa44d19e6..b40b92486 100644 --- a/core/encoding/json/parser.odin +++ b/core/encoding/json/parser.odin @@ -264,13 +264,17 @@ parse_object_body :: proc(p: ^Parser, end_token: Token_Kind) -> (obj: Object, er return } - insert_success := runtime.map_insert(&obj, key, elem) - // NOTE(gonz): we'd rather check specifically for an allocation error here but - // `map_insert` doesn't differentiate; we can only check for `nil` - if insert_success == nil { - return nil, .Out_Of_Memory + // NOTE(gonz): There are code paths for which this traversal ends up + // inserting empty key/values into the object and for those we do not + // want to allocate anything + if key != "" { + reserve_error := reserve(&obj, len(obj) + 1) + if reserve_error == mem.Allocator_Error.Out_Of_Memory { + return nil, .Out_Of_Memory + } + obj[key] = elem } - + if parse_comma(p) { break }