From a76dc45512acf8182f4fad5d3a9d5db6e08bbe9e Mon Sep 17 00:00:00 2001 From: Chip Salzenberg Date: Thu, 3 Oct 2013 19:07:20 -0700 Subject: [PATCH 1/2] paper bag bug: json_string_set* functions should set the length too --- src/value.c | 1 + 1 file changed, 1 insertion(+) diff --git a/src/value.c b/src/value.c index 1b69904..417ea85 100644 --- a/src/value.c +++ b/src/value.c @@ -723,6 +723,7 @@ int json_string_setn_nocheck(json_t *json, const char *value, size_t len) string = json_to_string(json); jsonp_free(string->value); string->value = dup; + string->length = len; return 0; } From c7d479c74089e9251698f65a1202baf1ef3e8f16 Mon Sep 17 00:00:00 2001 From: Chip Salzenberg Date: Thu, 3 Oct 2013 19:07:50 -0700 Subject: [PATCH 2/2] in simple string tests, always check lengths too --- test/suites/api/test_simple.c | 34 ++++++++++++++++++++++++++++++---- 1 file changed, 30 insertions(+), 4 deletions(-) diff --git a/test/suites/api/test_simple.c b/test/suites/api/test_simple.c index d24d84e..ca97a7d 100644 --- a/test/suites/api/test_simple.c +++ b/test/suites/api/test_simple.c @@ -72,11 +72,22 @@ static void run_tests() fail("json_string failed"); if(strcmp(json_string_value(value), "foo")) fail("invalid string value"); + if (json_string_length(value) != 3) + fail("invalid string length"); - if(json_string_set(value, "bar")) + if(json_string_set(value, "barr")) fail("json_string_set failed"); - if(strcmp(json_string_value(value), "bar")) + if(strcmp(json_string_value(value), "barr")) fail("invalid string value"); + if (json_string_length(value) != 4) + fail("invalid string length"); + + if(json_string_setn(value, "hi\0ho", 5)) + fail("json_string_set failed"); + if(memcmp(json_string_value(value), "hi\0ho\0", 6)) + fail("invalid string value"); + if (json_string_length(value) != 5) + fail("invalid string length"); json_decref(value); @@ -94,11 +105,22 @@ static void run_tests() fail("json_string_nocheck failed"); if(strcmp(json_string_value(value), "foo")) fail("invalid string value"); + if (json_string_length(value) != 3) + fail("invalid string length"); - if(json_string_set_nocheck(value, "bar")) + if(json_string_set_nocheck(value, "barr")) fail("json_string_set_nocheck failed"); - if(strcmp(json_string_value(value), "bar")) + if(strcmp(json_string_value(value), "barr")) fail("invalid string value"); + if (json_string_length(value) != 4) + fail("invalid string length"); + + if(json_string_setn_nocheck(value, "hi\0ho", 5)) + fail("json_string_set failed"); + if(memcmp(json_string_value(value), "hi\0ho\0", 6)) + fail("invalid string value"); + if (json_string_length(value) != 5) + fail("invalid string length"); json_decref(value); @@ -108,11 +130,15 @@ static void run_tests() fail("json_string_nocheck failed"); if(strcmp(json_string_value(value), "qu\xff")) fail("invalid string value"); + if (json_string_length(value) != 3) + fail("invalid string length"); if(json_string_set_nocheck(value, "\xfd\xfe\xff")) fail("json_string_set_nocheck failed"); if(strcmp(json_string_value(value), "\xfd\xfe\xff")) fail("invalid string value"); + if (json_string_length(value) != 3) + fail("invalid string length"); json_decref(value);