aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMark Pulford <mark@kyne.com.au>2011-11-29 22:47:35 +1030
committerMark Pulford <mark@kyne.com.au>2011-11-29 22:47:35 +1030
commit630bb3f16f27c72e3fc2daf3161c96f0fd9c1ba0 (patch)
tree34265a52407f5d61ca5304a4fff2b0f9f1c5753e
parent83c15a39a071a5bb4bcb41385ed58cc6d8fae6de (diff)
downloadlua-cjson-630bb3f16f27c72e3fc2daf3161c96f0fd9c1ba0.tar.gz
lua-cjson-630bb3f16f27c72e3fc2daf3161c96f0fd9c1ba0.tar.bz2
lua-cjson-630bb3f16f27c72e3fc2daf3161c96f0fd9c1ba0.zip
Add workaround to handle platforms that print -nan
-rw-r--r--lua_cjson.c17
-rwxr-xr-xtests/test.lua4
2 files changed, 11 insertions, 10 deletions
diff --git a/lua_cjson.c b/lua_cjson.c
index 1226e71..806a67c 100644
--- a/lua_cjson.c
+++ b/lua_cjson.c
@@ -623,12 +623,17 @@ static void json_append_number(lua_State *l, strbuf_t *json, int index,
623 if (cfg->encode_refuse_badnum && (isinf(num) || isnan(num))) 623 if (cfg->encode_refuse_badnum && (isinf(num) || isnan(num)))
624 json_encode_exception(l, cfg, index, "must not be NaN or Inf"); 624 json_encode_exception(l, cfg, index, "must not be NaN or Inf");
625 625
626 /* Lowest double printed with %.14g is 21 characters long: 626 if (isnan(num)) {
627 * -1.7976931348623e+308 627 /* Some platforms may print -nan, just hard code it */
628 * 628 strbuf_append_mem(json, "nan", 3);
629 * Use 32 to include the \0, and a few extra just in case.. 629 } else {
630 */ 630 /* Lowest double printed with %.14g is 21 characters long:
631 strbuf_append_fmt(json, 32, cfg->number_fmt, num); 631 * -1.7976931348623e+308
632 *
633 * Use 32 to include the \0, and a few extra just in case..
634 */
635 strbuf_append_fmt(json, 32, cfg->number_fmt, num);
636 }
632} 637}
633 638
634static void json_append_object(lua_State *l, json_config_t *cfg, 639static void json_append_object(lua_State *l, json_config_t *cfg,
diff --git a/tests/test.lua b/tests/test.lua
index d80dcf0..02d3760 100755
--- a/tests/test.lua
+++ b/tests/test.lua
@@ -150,10 +150,6 @@ local encode_error_tests = {
150 json.refuse_invalid_numbers(false) 150 json.refuse_invalid_numbers(false)
151 return 'Setting refuse_invalid_numbers(false).' 151 return 'Setting refuse_invalid_numbers(false).'
152 end, 152 end,
153 function ()
154 print('NOTE: receiving "-nan" in the following test is ok..')
155 return
156 end,
157 { json.encode, { NaN }, true, { "nan" } }, 153 { json.encode, { NaN }, true, { "nan" } },
158 { json.encode, { Inf }, true, { "inf" } }, 154 { json.encode, { Inf }, true, { "inf" } },
159 function () 155 function ()