From b43a181bf41f89abdb2cedb4859bc49b48db3d96 Mon Sep 17 00:00:00 2001 From: Hornwitser Date: Sat, 26 Jun 2021 17:26:01 +0200 Subject: [PATCH] Fix JSON serialization in export mod Fix incorrect serialization of control characters to \xHH escapes since JSON only support \uHHHH escapes, and serialization of infinite and NaN numbers. --- packages/slave/lua/export/data-final-fixes.lua | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/packages/slave/lua/export/data-final-fixes.lua b/packages/slave/lua/export/data-final-fixes.lua index c4f0e7d3..335ac5c1 100644 --- a/packages/slave/lua/export/data-final-fixes.lua +++ b/packages/slave/lua/export/data-final-fixes.lua @@ -46,11 +46,14 @@ end -- no game.table_to_json here :( local function table_to_json(data) if type(data) == "number" then + if data == math.huge then return "1e500" end -- Inf is not representable in JSON, but 1e500 will overflow to it. + if data == -math.huge then return "-1e500" end + if data ~= data then return "0" end -- NaN is not representable in JSON, treat as 0 instead. return string.format("%.17g", data) elseif type(data) == "string" then data = data:gsub('([\x00-\x1f\\"])', function(match) - return "\\x" .. string.format("%02x", match:byte()) + return "\\u00" .. string.format("%02x", match:byte()) end) return '"' .. data .. '"'