aboutsummaryrefslogtreecommitdiffstats
path: root/util
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
commit40e3e8175b1363f4ebf73aa30c030fc6fb699a25 (patch)
tree1fee10d66ac649b7708e61cb7164c6407bea9582 /util
parent082cef0837809abdba16cf1ad9660b34263860c8 (diff)
downloadprosody-40e3e8175b1363f4ebf73aa30c030fc6fb699a25.tar.gz
prosody-40e3e8175b1363f4ebf73aa30c030fc6fb699a25.zip
util.serialization: Proper serialization of Infinity, -Infinity and NaN.
Diffstat (limited to 'util')
-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