Skip to content
Permalink
Browse files

Fix crash of cJSON_GetObjectItemCaseSensitive when calling it on arrays

  • Loading branch information...
FSMaxB committed Dec 16, 2018
1 parent cb1df2f commit be749d7efa7c9021da746e685bd6dec79f9dd99b
Showing with 29 additions and 1 deletion.
  1. +5 −1 cJSON.c
  2. +24 −0 tests/misc_tests.c
@@ -1781,7 +1781,7 @@ static cJSON *get_object_item(const cJSON * const object, const char * const nam
current_element = object->child;
if (case_sensitive)
{
while ((current_element != NULL) && (strcmp(name, current_element->string) != 0))
while ((current_element != NULL) && (current_element->string != NULL) && (strcmp(name, current_element->string) != 0))
{
current_element = current_element->next;
}
@@ -1794,6 +1794,10 @@ static cJSON *get_object_item(const cJSON * const object, const char * const nam
}
}

if ((current_element == NULL) || (current_element->string == NULL)) {
return NULL;
}

return current_element;
}

@@ -127,6 +127,28 @@ static void cjson_get_object_item_case_sensitive_should_get_object_items(void)
cJSON_Delete(item);
}

static void cjson_get_object_item_should_not_crash_with_array(void) {
cJSON *array = NULL;
cJSON *found = NULL;
array = cJSON_Parse("[1]");

found = cJSON_GetObjectItem(array, "name");
TEST_ASSERT_NULL(found);

cJSON_Delete(array);
}

static void cjson_get_object_item_case_sensitive_should_not_crash_with_array(void) {
cJSON *array = NULL;
cJSON *found = NULL;
array = cJSON_Parse("[1]");

found = cJSON_GetObjectItemCaseSensitive(array, "name");
TEST_ASSERT_NULL(found);

cJSON_Delete(array);
}

static void typecheck_functions_should_check_type(void)
{
cJSON invalid[1];
@@ -535,6 +557,8 @@ int CJSON_CDECL main(void)
RUN_TEST(cjson_array_foreach_should_not_dereference_null_pointer);
RUN_TEST(cjson_get_object_item_should_get_object_items);
RUN_TEST(cjson_get_object_item_case_sensitive_should_get_object_items);
RUN_TEST(cjson_get_object_item_should_not_crash_with_array);
RUN_TEST(cjson_get_object_item_case_sensitive_should_not_crash_with_array);
RUN_TEST(typecheck_functions_should_check_type);
RUN_TEST(cjson_should_not_parse_to_deeply_nested_jsons);
RUN_TEST(cjson_set_number_value_should_set_numbers);

0 comments on commit be749d7

Please sign in to comment.
You can’t perform that action at this time.