Browse Source

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
pull/185/head
Max Bruckner 8 years ago
parent
commit
569aa060c6
  1. 5
      cJSON.c
  2. 4
      tests/compare_tests.c

5
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;
}

4
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)

Loading…
Cancel
Save