From 707c2fc319ebfc9f0ac816922c20525bcd184f77 Mon Sep 17 00:00:00 2001 From: orri Date: Tue, 30 Apr 2024 09:46:17 +0000 Subject: [PATCH] Add test for heap buffer overflow From #800 --- tests/parse_examples.c | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) diff --git a/tests/parse_examples.c b/tests/parse_examples.c index 95a09590..4fb8f049 100644 --- a/tests/parse_examples.c +++ b/tests/parse_examples.c @@ -250,6 +250,40 @@ static void test14_should_not_be_parsed(void) } } +/* Address Sanitizer */ +static void test15_should_not_heap_buffer_overflow(void) +{ + const char *strings[] = { + "{\"1\":1,", + "{\"1\":1, ", + }; + + size_t i; + + for (i = 0; i < sizeof(strings) / sizeof(strings[0]); i+=1) + { + const char *json_string = strings[i]; + size_t len = strlen(json_string); + cJSON *json = NULL; + + char *exact_size_heap = malloc(len); + if (exact_size_heap == NULL) + { + continue; + } + + memcpy(exact_size_heap, json_string, len); + json = cJSON_ParseWithLength(exact_size_heap, len); + + if (json) + { + cJSON_Delete(json); + } + + free(exact_size_heap); + } +} + int CJSON_CDECL main(void) { UNITY_BEGIN(); @@ -267,5 +301,6 @@ int CJSON_CDECL main(void) RUN_TEST(test12_should_not_be_parsed); RUN_TEST(test13_should_be_parsed_without_null_termination); RUN_TEST(test14_should_not_be_parsed); + RUN_TEST(test15_should_not_heap_buffer_overflow); return UNITY_END(); }