From d5090bb8f19f4b0fd868a5f9af367ebbb67b7f5a Mon Sep 17 00:00:00 2001 From: Mark Pulford Date: Sat, 3 Mar 2012 10:48:09 +1030 Subject: Use Javascript compat values for Infinity/NaN Use Javascript compatible values for Infinity/NaN when encoding invalid numbers. --- lua_cjson.c | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) (limited to 'lua_cjson.c') diff --git a/lua_cjson.c b/lua_cjson.c index ca5b88d..c14a1c5 100644 --- a/lua_cjson.c +++ b/lua_cjson.c @@ -592,12 +592,20 @@ static void json_append_number(lua_State *l, json_config_t *cfg, if (cfg->encode_invalid_numbers == 0) { /* Prevent encoding invalid numbers */ if (isinf(num) || isnan(num)) - json_encode_exception(l, cfg, json, lindex, "must not be NaN or Inf"); + json_encode_exception(l, cfg, json, lindex, + "must not be NaN or Infinity"); } else if (cfg->encode_invalid_numbers == 1) { - /* Encode invalid numbers, but handle "nan" separately - * since some platforms may encode as "-nan". */ + /* Encode NaN/Infinity separately to ensure Javascript compatible + * values are used. */ if (isnan(num)) { - strbuf_append_mem(json, "nan", 3); + strbuf_append_mem(json, "NaN", 3); + return; + } + if (isinf(num)) { + if (num < 0) + strbuf_append_mem(json, "-Infinity", 9); + else + strbuf_append_mem(json, "Infinity", 8); return; } } else { -- cgit v1.2.3-55-g6feb