diff options
Diffstat (limited to '')
-rw-r--r-- | lua-cjson-1.0devel-1.rockspec | 11 | ||||
-rw-r--r-- | lua_cjson.c | 15 |
2 files changed, 22 insertions, 4 deletions
diff --git a/lua-cjson-1.0devel-1.rockspec b/lua-cjson-1.0devel-1.rockspec index fa20c53..9ef9f2c 100644 --- a/lua-cjson-1.0devel-1.rockspec +++ b/lua-cjson-1.0devel-1.rockspec | |||
@@ -25,15 +25,18 @@ build = { | |||
25 | cjson = { | 25 | cjson = { |
26 | sources = { "lua_cjson.c", "strbuf.c", "fpconv.c" }, | 26 | sources = { "lua_cjson.c", "strbuf.c", "fpconv.c" }, |
27 | defines = { | 27 | defines = { |
28 | -- Optional workaround: | ||
29 | -- USE_INTERNAL_ISINF: Provide internal isinf() implementation. Required | ||
30 | -- on some Solaris platforms. | ||
31 | -- LuaRocks does not support platform specific configuration for Solaris. | 28 | -- LuaRocks does not support platform specific configuration for Solaris. |
32 | -- Uncomment the line below on Solaris platforms. | 29 | -- Uncomment the line below on Solaris platforms if required. |
33 | -- "USE_INTERNAL_ISINF" | 30 | -- "USE_INTERNAL_ISINF" |
34 | } | 31 | } |
35 | } | 32 | } |
36 | }, | 33 | }, |
34 | -- Override default build options (per platform) | ||
35 | platforms = { | ||
36 | win32 = { modules = { cjson = { defines = { | ||
37 | "DISABLE_INVALID_NUMBERS" | ||
38 | } } } } | ||
39 | }, | ||
37 | copy_directories = { "tests" } | 40 | copy_directories = { "tests" } |
38 | } | 41 | } |
39 | 42 | ||
diff --git a/lua_cjson.c b/lua_cjson.c index 175433a..ca85156 100644 --- a/lua_cjson.c +++ b/lua_cjson.c | |||
@@ -67,6 +67,11 @@ | |||
67 | #define DEFAULT_ENCODE_KEEP_BUFFER 1 | 67 | #define DEFAULT_ENCODE_KEEP_BUFFER 1 |
68 | #define DEFAULT_ENCODE_NUMBER_PRECISION 14 | 68 | #define DEFAULT_ENCODE_NUMBER_PRECISION 14 |
69 | 69 | ||
70 | #ifdef DISABLE_INVALID_NUMBERS | ||
71 | #undef DEFAULT_DECODE_REFUSE_BADNUM | ||
72 | #define DEFAULT_DECODE_REFUSE_BADNUM 1 | ||
73 | #endif | ||
74 | |||
70 | typedef enum { | 75 | typedef enum { |
71 | T_OBJ_BEGIN, | 76 | T_OBJ_BEGIN, |
72 | T_OBJ_END, | 77 | T_OBJ_END, |
@@ -341,6 +346,16 @@ static int json_cfg_refuse_invalid_numbers(lua_State *l) | |||
341 | &cfg->encode_refuse_badnum, | 346 | &cfg->encode_refuse_badnum, |
342 | &cfg->decode_refuse_badnum); | 347 | &cfg->decode_refuse_badnum); |
343 | 348 | ||
349 | #if DISABLE_INVALID_NUMBERS | ||
350 | /* Some non-POSIX platforms don't handle double <-> string translations | ||
351 | * for Infinity/NaN/hexadecimal properly. Throw an error if the | ||
352 | * user attempts to enable them. */ | ||
353 | if (!cfg->encode_refuse_badnum || !cfg->decode_refuse_badnum) { | ||
354 | cfg->encode_refuse_badnum = cfg->decode_refuse_badnum = 1; | ||
355 | luaL_error(l, "Infinity, NaN, and/or hexadecimal numbers are not supported."); | ||
356 | } | ||
357 | #endif | ||
358 | |||
344 | return 1; | 359 | return 1; |
345 | } | 360 | } |
346 | 361 | ||