diff options
author | Adrian Yanes <ayanes@gnu.org> | 2013-06-07 13:14:54 -0700 |
---|---|---|
committer | Adrian Yanes <ayanes@gnu.org> | 2013-06-12 19:48:00 -0700 |
commit | d086e2018c7938b0038db714335213a2ad91fa91 (patch) | |
tree | ec303eee14f713ea23adbddc278477b2c89399ce /json_object.c | |
parent | e48a25cfbb18449505edf6205cb069e346dce0f8 (diff) |
Fixes for Infinity and NaN
Although JSON RFC does not support NaN or Infinity
as numeric values ECMA 262 section 9.8.1 defines
how to handle these cases as strings
Diffstat (limited to 'json_object.c')
-rw-r--r-- | json_object.c | 14 |
1 files changed, 13 insertions, 1 deletions
diff --git a/json_object.c b/json_object.c index f2b5ce0..b955f6d 100644 --- a/json_object.c +++ b/json_object.c @@ -16,6 +16,7 @@ #include <stdlib.h> #include <stddef.h> #include <string.h> +#include <math.h> #include "debug.h" #include "printbuf.h" @@ -561,8 +562,19 @@ static int json_object_double_to_json_string(struct json_object* jso, { char buf[128], *p, *q; int size; + /* Although JSON RFC does not support + NaN or Infinity as numeric values + ECMA 262 section 9.8.1 defines + how to handle these cases as strings */ + if(isnan(jso->o.c_double)) + size = snprintf(buf, 128, "NaN"); + else if(isinf(jso->o.c_double) == 1) + size = snprintf(buf, 128, "Infinity"); + else if(isinf(jso->o.c_double) == -1) + size = snprintf(buf, 128, "-Infinity"); + else + size = snprintf(buf, 128, "%f", jso->o.c_double); - size = snprintf(buf, 128, "%f", jso->o.c_double); p = strchr(buf, ','); if (p) { *p = '.'; |