diff --git a/cJSON.c b/cJSON.c index 0722c8e..51fded7 100644 --- a/cJSON.c +++ b/cJSON.c @@ -2594,6 +2594,11 @@ CJSON_PUBLIC(cJSON_bool) cJSON_Compare(const cJSON * const a, const cJSON * cons b_element = b_element->next; } + /* one of the arrays is longer than the other */ + if (a_element != b_element) { + return false; + } + return true; } diff --git a/tests/compare_tests.c b/tests/compare_tests.c index 654e14e..5984268 100644 --- a/tests/compare_tests.c +++ b/tests/compare_tests.c @@ -148,6 +148,10 @@ static void cjson_compare_should_compare_arrays(void) TEST_ASSERT_FALSE(compare_from_string("[true,null,42,\"string\",[],{}]", "[false, true, null, 42, \"string\", [], {}]", true)); TEST_ASSERT_FALSE(compare_from_string("[true,null,42,\"string\",[],{}]", "[false, true, null, 42, \"string\", [], {}]", false)); + + /* Arrays that are a prefix of another array */ + TEST_ASSERT_FALSE(compare_from_string("[1,2,3]", "[1,2]", true)); + TEST_ASSERT_FALSE(compare_from_string("[1,2,3]", "[1,2]", false)); } static void cjson_compare_should_compare_objects(void)