Added checking and tests for trailing garbage when decoding

pull/10/head
rxi 2018-03-10 14:28:50 +00:00
parent 19cc024df6
commit eb6e343c53
2 changed files with 9 additions and 4 deletions

View File

@ -388,7 +388,12 @@ function json.decode(str)
if type(str) ~= "string" then
error("expected argument of type string, got " .. type(str))
end
return ( parse(str, next_char(str, 1, space_chars, true)) )
local res, idx = parse(str, next_char(str, 1, space_chars, true))
idx = next_char(str, idx, space_chars, true)
if idx <= #str then
decode_error(str, idx, "trailing garbage")
end
return res
end

View File

@ -57,7 +57,7 @@ end)
test("literals", function()
assert( json.decode("true") == true )
assert( json.encode(true) == "true" )
assert( json.encode(true) == "true" )
assert( json.decode("false") == false )
assert( json.encode(false) == "false" )
assert( json.decode("null") == nil )
@ -125,6 +125,8 @@ test("decode invalid", function()
'{]',
'[}',
'"a',
'10 xx',
'{}123'
}
for i, v in ipairs(t) do
local status = pcall(json.decode, v)
@ -234,5 +236,3 @@ test("encode escape", function()
assert( res == v, fmt("'%s' was not escaped properly", k) )
end
end)