diff --git a/json_pointer.c b/json_pointer.c index 3648f8d..380d6e5 100644 --- a/json_pointer.c +++ b/json_pointer.c @@ -33,7 +33,7 @@ static void string_replace_all_occurrences_with_char(char *s, const char *occur, *p = repl_char; p++; slen -= skip; - memcpy(p, (p + skip), slen - (p - s) + 1); /* includes null char too */ + memmove(p, (p + skip), slen - (p - s) + 1); /* includes null char too */ } } diff --git a/tests/test_json_pointer.c b/tests/test_json_pointer.c index f42d010..c3733de 100644 --- a/tests/test_json_pointer.c +++ b/tests/test_json_pointer.c @@ -261,15 +261,21 @@ static void test_wrong_inputs_set() printf("PASSED - SET - failed 'cod' with path 'foo/bar'\n"); json_object_put(jo2); - assert(0 != json_pointer_set(&jo1, "/fud/gaw", (jo2 = json_object_new_string("whatever")))); + jo2 = json_object_new_string("whatever"); + assert(0 != json_pointer_set(&jo1, "/fud/gaw", jo2)); assert(0 == json_pointer_set(&jo1, "/fud", json_object_new_object())); assert(0 == json_pointer_set(&jo1, "/fud/gaw", jo2)); /* re-using jo2 from above */ - assert(0 != json_pointer_set(&jo1, "/fud/gaw/0", json_object_new_int(0))); - assert(0 != json_pointer_set(&jo1, "/fud/gaw/", json_object_new_int(0))); + // ownership of jo2 transferred into jo1 + + jo2 = json_object_new_int(0); + assert(0 != json_pointer_set(&jo1, "/fud/gaw/0", jo2)); + json_object_put(jo2); + jo2 = json_object_new_int(0); + assert(0 != json_pointer_set(&jo1, "/fud/gaw/", jo2)); + json_object_put(jo2); printf("PASSED - SET - failed to set index to non-array\n"); json_object_put(jo1); - json_object_put(jo2); } int main(int argc, char **argv)