From: Jo-Philipp Wich Date: Wed, 13 Nov 2019 08:03:38 +0000 (+0100) Subject: luci-lib-jsonc: store large JSON integer values as Lua doubles X-Git-Url: https://git.librecmc.org/?a=commitdiff_plain;h=ef819b5039d77c6e5b29f9c747ecbb2949ff0df4;p=oweals%2Fluci.git luci-lib-jsonc: store large JSON integer values as Lua doubles Fixes: #3293 Signed-off-by: Jo-Philipp Wich (cherry picked from commit 8da8f38bf97c925f6f113d3b4793edb23e7e0dc2) --- diff --git a/libs/luci-lib-jsonc/src/jsonc.c b/libs/luci-lib-jsonc/src/jsonc.c index ef1110166..03a5c621b 100644 --- a/libs/luci-lib-jsonc/src/jsonc.c +++ b/libs/luci-lib-jsonc/src/jsonc.c @@ -17,6 +17,7 @@ limitations under the License. #define _GNU_SOURCE #include +#include #include #include @@ -138,6 +139,7 @@ static int json_parse_chunk(lua_State *L) static void _json_to_lua(lua_State *L, struct json_object *obj) { + int64_t v; int n; switch (json_object_get_type(obj)) @@ -165,7 +167,12 @@ static void _json_to_lua(lua_State *L, struct json_object *obj) break; case json_type_int: - lua_pushinteger(L, json_object_get_int(obj)); + v = json_object_get_int64(obj); + if (sizeof(lua_Integer) > sizeof(int32_t) || + (v >= INT32_MIN && v <= INT32_MAX)) + lua_pushinteger(L, (lua_Integer)v); + else + lua_pushnumber(L, (lua_Number)v); break; case json_type_double: