From 5b502cdbfb21fbe5f6cf9ffbd2b96e4281a741e6 Mon Sep 17 00:00:00 2001 From: Alanscut Date: Thu, 9 May 2024 10:45:16 +0800 Subject: [PATCH] feat: add tests for #842 Add some tests for setting NULL to deallocated pointers releated to #842 and #833 --- tests/CMakeLists.txt | 1 + tests/misc_tests.c | 18 ++++++++++++++++++ 2 files changed, 19 insertions(+) diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index c759221..9e8962f 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -62,6 +62,7 @@ if(ENABLE_CJSON_TEST) option(ENABLE_VALGRIND OFF "Enable the valgrind memory checker for the tests.") if (ENABLE_VALGRIND) + add_compile_definitions(ENABLE_VALGRIND) find_program(MEMORYCHECK_COMMAND valgrind) if ("${MEMORYCHECK_COMMAND}" MATCHES "MEMORYCHECK_COMMAND-NOTFOUND") message(WARNING "Valgrind couldn't be found.") diff --git a/tests/misc_tests.c b/tests/misc_tests.c index ba3e003..94dd91a 100644 --- a/tests/misc_tests.c +++ b/tests/misc_tests.c @@ -732,6 +732,23 @@ static void cjson_set_bool_value_must_not_break_objects(void) cJSON_Delete(sobj); } +static void deallocated_pointers_should_be_set_to_null(void) +{ + /* deallocated pointers should be set to null */ + /* however, valgrind on linux reports when attempting to access a freed memory, we have to skip it */ +#ifndef ENABLE_VALGRIND + cJSON *string = cJSON_CreateString("item"); + cJSON *root = cJSON_CreateObject(); + + cJSON_Delete(string); + free(string->valuestring); + + cJSON_AddObjectToObject(root, "object"); + cJSON_Delete(root->child); + free(root->child->string); +#endif +} + int CJSON_CDECL main(void) { UNITY_BEGIN(); @@ -762,6 +779,7 @@ int CJSON_CDECL main(void) RUN_TEST(cjson_delete_item_from_array_should_not_broken_list_structure); RUN_TEST(cjson_set_valuestring_to_object_should_not_leak_memory); RUN_TEST(cjson_set_bool_value_must_not_break_objects); + RUN_TEST(deallocated_pointers_should_be_set_to_null); return UNITY_END(); }