Forráskód Böngészése

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
Max Bruckner 8 éve
szülő
commit
569aa060c6
2 módosított fájl, 9 hozzáadás és 0 törlés
  1. 5 0
      cJSON.c
  2. 4 0
      tests/compare_tests.c

+ 5 - 0
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 - 0
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)