Browse Source

Merge pull request #614 from stoeckmann/format

Prevent truncation on custom double formatters.
tags/json-c-0.15-20200726
Eric Hawicz GitHub 5 years ago
parent
commit
5b15c7567d
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 17 additions and 2 deletions
  1. +2
    -1
      json_object.c
  2. +13
    -1
      tests/test_set_serializer.c
  3. +2
    -0
      tests/test_set_serializer.expected

+ 2
- 1
json_object.c View File

@@ -969,7 +969,8 @@ static int json_object_double_to_json_string_format(struct json_object *jso, str
p = q; p = q;
} }
/* drop trailing zeroes */ /* drop trailing zeroes */
*(++p) = 0;
if (*p != 0)
*(++p) = 0;
size = p - buf; size = p - buf;
} }
} }


+ 13
- 1
tests/test_set_serializer.c View File

@@ -26,7 +26,7 @@ static int custom_serializer(struct json_object *o, struct printbuf *pb, int lev


int main(int argc, char **argv) int main(int argc, char **argv)
{ {
json_object *my_object;
json_object *my_object, *my_sub_object;


MC_SET_DEBUG(1); MC_SET_DEBUG(1);


@@ -67,5 +67,17 @@ int main(int argc, char **argv)
json_object_put(my_object); json_object_put(my_object);
assert(freeit_was_called); assert(freeit_was_called);


// ============================================

my_object = json_object_new_object();
my_sub_object = json_object_new_double(1.0);
json_object_object_add(my_object, "double", my_sub_object);
printf("Check that the custom serializer does not include nul byte:\n");
json_object_set_serializer(my_sub_object, json_object_double_to_json_string, "%125.0f,", NULL);
printf("my_object.to_string(custom serializer)=%s\n",
json_object_to_json_string_ext(my_object, JSON_C_TO_STRING_NOZERO));

json_object_put(my_object);

return 0; return 0;
} }

+ 2
- 0
tests/test_set_serializer.expected View File

@@ -8,3 +8,5 @@ Check that the custom serializer isn't free'd until the last json_object_put:
my_object.to_string(custom serializer)=Custom Output my_object.to_string(custom serializer)=Custom Output
Next line of output should be from the custom freeit function: Next line of output should be from the custom freeit function:
freeit, value=123 freeit, value=123
Check that the custom serializer does not include nul byte:
my_object.to_string(custom serializer)={"double": 1.}

Loading…
Cancel
Save