From 569aa060c6319fb24ab21bbf699aad2c40f454c1 Mon Sep 17 00:00:00 2001 From: Max Bruckner Date: Tue, 13 Jun 2017 08:39:18 +0200 Subject: [PATCH] cJSON_Compare: Fix comparison of arrays It did consider two arrays equal if one is a prefix of the other one, which is incorrect. See #180 --- cJSON.c | 5 +++++ tests/compare_tests.c | 4 ++++ 2 files changed, 9 insertions(+) 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)