From 2dc01878365957a34d106d212be4599270df9fb1 Mon Sep 17 00:00:00 2001 From: Jeroen van Rijn Date: Mon, 25 Nov 2024 13:16:27 +0100 Subject: [PATCH] Test #4515 --- tests/core/encoding/json/test_core_json.odin | 34 ++++++++++++++++++++ 1 file changed, 34 insertions(+) diff --git a/tests/core/encoding/json/test_core_json.odin b/tests/core/encoding/json/test_core_json.odin index f588d34fa..0e9c07107 100644 --- a/tests/core/encoding/json/test_core_json.odin +++ b/tests/core/encoding/json/test_core_json.odin @@ -83,6 +83,40 @@ out_of_memory_in_parse_json :: proc(t: ^testing.T) { testing.expectf(t, err == json.Error.Out_Of_Memory, "Expected `json.parse` to fail with %v, got %v", expected_error, err) } +@test +out_of_memory_in_unmarshal :: proc(t: ^testing.T) { + arena: virtual.Arena + arena_buffer: [128]byte + arena_init_error := virtual.arena_init_buffer(&arena, arena_buffer[:]) + testing.expectf(t, arena_init_error == nil, "Expected arena initialization to not return error, got: %v\n", arena_init_error) + + context.allocator = virtual.arena_allocator(&arena) + + json_data := `{ + "number": 42, + "strs": [ + "Cat", + "Dog", + "Toucan" + ], + "flag": true + }` + + Test_Structure :: struct { + number: int, + strs: []string, + flag: bool, + } + test_result: Test_Structure + + err := json.unmarshal(transmute([]u8)json_data, &test_result) + testing.expectf(t, err == nil, "Expected `json.unmarshal` to succeed, got error %v", err) + + err = json.unmarshal(transmute([]u8)json_data, &test_result) + expected_error := json.Error.Out_Of_Memory + testing.expectf(t, err == json.Error.Out_Of_Memory, "Expected `json.unmarshal` to fail with %v, got %v", expected_error, err) +} + @test marshal_json :: proc(t: ^testing.T) {