aboutsummaryrefslogtreecommitdiffstats
path: root/util/serialization.lua
diff options
context:
space:
mode:
authorWaqas Hussain <waqas20@gmail.com>2010-12-13 20:45:08 +0500
committerWaqas Hussain <waqas20@gmail.com>2010-12-13 20:45:08 +0500
commitde4152ae6df819fea2bc68ff73301d9b85b3a708 (patch)
tree0b0b5309987a7b6a91c69d5df18623ccf44f4e6f /util/serialization.lua
parent503997bd9d919551b36d89385889a659a02bdf9c (diff)
downloadprosody-de4152ae6df819fea2bc68ff73301d9b85b3a708.tar.gz
prosody-de4152ae6df819fea2bc68ff73301d9b85b3a708.zip
util.serialization: Proper serialization of Infinity, -Infinity and NaN.
Diffstat (limited to 'util/serialization.lua')
-rw-r--r--util/serialization.lua10
1 files changed, 8 insertions, 2 deletions
diff --git a/util/serialization.lua b/util/serialization.lua
index 474b5d65..e193b64f 100644
--- a/util/serialization.lua
+++ b/util/serialization.lua
@@ -28,14 +28,20 @@ local indent = function(i)
end
local function basicSerialize (o)
if type(o) == "number" or type(o) == "boolean" then
- return tostring(o);
+ -- no need to check for NaN, as that's not a valid table index
+ if o == 1/0 then return "(1/0)";
+ elseif o == -1/0 then return "(-1/0)";
+ else return tostring(o); end
else -- assume it is a string -- FIXME make sure it's a string. throw an error otherwise.
return (("%q"):format(tostring(o)):gsub("\\\n", "\\n"));
end
end
local function _simplesave(o, ind, t, func)
if type(o) == "number" then
- func(t, tostring(o));
+ if o ~= o then func(t, "(0/0)");
+ elseif o == 1/0 then func(t, "(1/0)");
+ elseif o == -1/0 then func(t, "(-1/0)");
+ else func(t, tostring(o)); end
elseif type(o) == "string" then
func(t, (("%q"):format(o):gsub("\\\n", "\\n")));
elseif type(o) == "table" then