summaryrefslogtreecommitdiff
path: root/json_object.c
diff options
context:
space:
mode:
authorAdrian Yanes <ayanes@gnu.org>2013-06-07 13:14:54 -0700
committerAdrian Yanes <ayanes@gnu.org>2013-06-12 19:48:00 -0700
commitd086e2018c7938b0038db714335213a2ad91fa91 (patch)
treeec303eee14f713ea23adbddc278477b2c89399ce /json_object.c
parente48a25cfbb18449505edf6205cb069e346dce0f8 (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.c14
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 = '.';