From 71534358105c4fe3c4e14053ff82c9268aa5fcf9 Mon Sep 17 00:00:00 2001 From: wolfosbournesl <350396304+wolfosbournesl@users.noreply.github.com> Date: Sun, 1 Nov 2026 14:07:02 -0300 Subject: [PATCH] Fix JSON encoding of 64-bit integers --- VM/src/cjson/lua_cjson.cpp | 2 +- tests/conformance/lljson.lua | 6 ++++++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/VM/src/cjson/lua_cjson.cpp b/VM/src/cjson/lua_cjson.cpp index 39bbfdea..d8f6f211 100644 --- a/VM/src/cjson/lua_cjson.cpp +++ b/VM/src/cjson/lua_cjson.cpp @@ -759,7 +759,7 @@ static void json_append_tagged_integer(lua_State *l, strbuf_t *json, int64_t num static void json_append_integer(lua_State *l, json_config_t *cfg, strbuf_t *json, int lindex) { - int64_t val = luaL_checkinteger(l, lindex); + int64_t val = luaL_checkinteger64(l, lindex); if (cfg->sl_tagged_types) json_append_tagged_integer(l, json, val); else diff --git a/tests/conformance/lljson.lua b/tests/conformance/lljson.lua index 47b9014e..73db131e 100644 --- a/tests/conformance/lljson.lua +++ b/tests/conformance/lljson.lua @@ -11,6 +11,8 @@ assert(lljson.encode(lljson.empty_array) == "[]") assert(lljson.encode(lljson.empty_object) == "{}") assert(lljson.encode({1}) == "[1]") assert(lljson.encode({integer.create(1)}) == "[1]") +assert(lljson.encode(integer.maxsigned) == "9223372036854775807") +assert(lljson.encode(integer.minsigned) == "-9223372036854775808") assert(lljson.encode(true) == "true") assert(lljson.encode({"foo"}) == '["foo"]') -- UUIDs are basically just strings, encode them as such. @@ -158,6 +160,10 @@ assert(lljson.slencode("normal") == '"normal"') assert(lljson.slencode(1i) == '"!i1"') assert(lljson.slencode({[1i]=1i}) == '{"!i1":"!i1"}') +assert(lljson.slencode(integer.maxsigned) == '"!i9223372036854775807"') +assert(lljson.slencode(integer.minsigned) == '"!i-9223372036854775808"') +assert(lljson.sldecode(lljson.slencode(integer.maxsigned)) == integer.maxsigned) +assert(lljson.sldecode(lljson.slencode(integer.minsigned)) == integer.minsigned) -- Tagged decoding of values assert(lljson.sldecode('"!v<1,2,3>"') == vector(1, 2, 3))