From: Adrian Yanes Date: Fri, 7 Jun 2013 20:14:54 +0000 (-0700) Subject: Fixes for Infinity and NaN X-Git-Tag: json-c-0.12-20140410~41^2 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=refs%2Fpull%2F89%2Fhead;p=thirdparty%2Fjson-c.git 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 --- diff --git a/json_object.c b/json_object.c index f2b5ce04..b955f6dd 100644 --- a/json_object.c +++ b/json_object.c @@ -16,6 +16,7 @@ #include #include #include +#include #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 = '.';