diff options
author | Waqas Hussain <waqas20@gmail.com> | 2010-12-13 20:45:08 +0500 |
---|---|---|
committer | Waqas Hussain <waqas20@gmail.com> | 2010-12-13 20:45:08 +0500 |
commit | 40e3e8175b1363f4ebf73aa30c030fc6fb699a25 (patch) | |
tree | 1fee10d66ac649b7708e61cb7164c6407bea9582 | |
parent | 082cef0837809abdba16cf1ad9660b34263860c8 (diff) | |
download | prosody-40e3e8175b1363f4ebf73aa30c030fc6fb699a25.tar.gz prosody-40e3e8175b1363f4ebf73aa30c030fc6fb699a25.zip |
util.serialization: Proper serialization of Infinity, -Infinity and NaN.
-rw-r--r-- | util/serialization.lua | 10 |
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 |