mirror of
https://github.com/bjc/prosody.git
synced 2025-04-01 20:27:39 +03:00
util.json: Accept empty arrays with whitespace (fixes #1782)
This commit is contained in:
parent
246d797f81
commit
d4daf40caa
2 changed files with 22 additions and 5 deletions
8
spec/json/pass4.json
Normal file
8
spec/json/pass4.json
Normal file
|
@ -0,0 +1,8 @@
|
|||
{
|
||||
"one": [
|
||||
|
||||
],
|
||||
"two": [],
|
||||
"three": [ ],
|
||||
"four": [ ]
|
||||
}
|
|
@ -217,12 +217,19 @@ local function _readobject(json, index)
|
|||
end
|
||||
local function _readarray(json, index)
|
||||
local a = {};
|
||||
local oindex = index;
|
||||
while true do
|
||||
local val;
|
||||
val, index = _readvalue(json, index + 1);
|
||||
local val, terminated;
|
||||
val, index, terminated = _readvalue(json, index + 1, 0x5d);
|
||||
if val == nil then
|
||||
if json:byte(oindex + 1) == 0x5d then return setmetatable(a, array_mt), oindex + 2; end -- "]"
|
||||
if terminated then -- "]" found instead of value
|
||||
if #a ~= 0 then
|
||||
-- A non-empty array here means we processed a comma,
|
||||
-- but it wasn't followed by a value. JSON doesn't allow
|
||||
-- trailing commas.
|
||||
return nil, "value expected";
|
||||
end
|
||||
val, index = setmetatable(a, array_mt), index+1;
|
||||
end
|
||||
return val, index;
|
||||
end
|
||||
t_insert(a, val);
|
||||
|
@ -294,7 +301,7 @@ local function _readfalse(json, index)
|
|||
end
|
||||
return nil, "false parse failed";
|
||||
end
|
||||
function _readvalue(json, index)
|
||||
function _readvalue(json, index, terminator)
|
||||
index = _skip_whitespace(json, index);
|
||||
local b = json:byte(index);
|
||||
-- TODO try table lookup instead of if-else?
|
||||
|
@ -312,6 +319,8 @@ function _readvalue(json, index)
|
|||
return _readtrue(json, index);
|
||||
elseif b == 0x66 then -- "f"
|
||||
return _readfalse(json, index);
|
||||
elseif b == terminator then
|
||||
return nil, index, true;
|
||||
else
|
||||
return nil, "value expected";
|
||||
end
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue