Browse Source

Merge pull request #289 from jgerhards/i-278

bugfix: floating point representaion without fractional part
tags/json-c-0.13-20171207
Eric Haszlakiewicz GitHub 8 years ago
parent
commit
1e4824a841
6 changed files with 47 additions and 3 deletions
  1. +4
    -1
      json_object.c
  2. +1
    -0
      tests/Makefile.am
  3. +24
    -0
      tests/test_float.c
  4. +4
    -0
      tests/test_float.expected
  5. +12
    -0
      tests/test_float.test
  6. +2
    -2
      tests/test_parse.expected

+ 4
- 1
json_object.c View File

@@ -693,6 +693,7 @@ static int json_object_double_to_json_string_format(struct json_object* jso,
{
char buf[128], *p, *q;
int size;
double dummy; /* needed for modf() */
/* Although JSON RFC does not support
NaN or Infinity as numeric values
ECMA 262 section 9.8.1 defines
@@ -706,7 +707,9 @@ static int json_object_double_to_json_string_format(struct json_object* jso,
size = snprintf(buf, sizeof(buf), "-Infinity");
else
size = snprintf(buf, sizeof(buf),
format ? format : "%.17g", jso->o.c_double);
format ? format :
(modf(jso->o.c_double, &dummy) == 0) ? "%.17g.0" : "%.17g",
jso->o.c_double);

p = strchr(buf, ',');
if (p) {


+ 1
- 0
tests/Makefile.am View File

@@ -7,6 +7,7 @@ LIBJSON_LA=$(top_builddir)/libjson-c.la

TESTS=
TESTS+= test_util_file.test
TESTS+= test_float.test
TESTS+= test1.test
TESTS+= test2.test
TESTS+= test4.test


+ 24
- 0
tests/test_float.c View File

@@ -0,0 +1,24 @@
/* Copyright (C) 2016 by Rainer Gerhards
* Released under ASL 2.0 */
#include "config.h"
#include <stdio.h>
#include "../json_object.h"
#include "../json_tokener.h"
int main(void)
{
json_object *json;

json = json_object_new_double(1.0);
printf("json = %s\n", json_object_to_json_string_ext(json, JSON_C_TO_STRING_PRETTY));
json_object_put(json);
json = json_object_new_double(1.23);
printf("json = %s\n", json_object_to_json_string_ext(json, JSON_C_TO_STRING_PRETTY));
json_object_put(json);
json = json_object_new_double(123456789.0);
printf("json = %s\n", json_object_to_json_string_ext(json, JSON_C_TO_STRING_PRETTY));
json_object_put(json);
json = json_object_new_double(123456789.123);
printf("json = %s\n", json_object_to_json_string_ext(json, JSON_C_TO_STRING_PRETTY));
json_object_put(json);
return 0;
}

+ 4
- 0
tests/test_float.expected View File

@@ -0,0 +1,4 @@
json = 1.0
json = 1.23
json = 123456789.0
json = 123456789.123

+ 12
- 0
tests/test_float.test View File

@@ -0,0 +1,12 @@
#!/bin/sh

# Common definitions
if test -z "$srcdir"; then
srcdir="${0%/*}"
test "$srcdir" = "$0" && srcdir=.
test -z "$srcdir" && srcdir=.
fi
. "$srcdir/test-defs.sh"

run_output_test test_float
exit $?

+ 2
- 2
tests/test_parse.expected View File

@@ -31,8 +31,8 @@ new_obj.to_string()={ "foo": "bar", "baz": null, "bool0": true }
new_obj.to_string()={ "foo": [ null, "foo" ] }
new_obj.to_string()={ "abc": 12, "foo": "bar", "bool0": false, "bool1": true, "arr": [ 1, 2, 3, null, 5 ] }
new_obj.to_string()={ "abc": "blue\nred\ngreen" }
new_obj.to_string()=[ 0 ]
new_obj.to_string()=[ 0 ]
new_obj.to_string()=[ 0.0 ]
new_obj.to_string()=[ 0.0 ]
new_obj.to_string()=null
new_obj.to_string()=[ 9223372036854775807 ]
==================================


Loading…
Cancel
Save