eval/decode: Accept \r as space character

This commit is contained in:
ZyX
2016-03-12 13:47:34 +03:00
parent d06c2a1b18
commit c129f6cfaf
2 changed files with 11 additions and 3 deletions

View File

@@ -617,7 +617,7 @@ int json_decode_string(const char *const buf, const size_t buf_len,
{ {
const char *p = buf; const char *p = buf;
const char *const e = buf + buf_len; const char *const e = buf + buf_len;
while (p < e && (*p == ' ' || *p == '\t' || *p == '\n')) { while (p < e && (*p == ' ' || *p == TAB || *p == NL || *p == CAR)) {
p++; p++;
} }
if (p == e) { if (p == e) {
@@ -730,7 +730,8 @@ json_decode_string_cycle_start:
} }
case ' ': case ' ':
case TAB: case TAB:
case NL: { case NL:
case CAR: {
continue; continue;
} }
case 'n': { case 'n': {
@@ -870,7 +871,8 @@ json_decode_string_after_cycle:
switch (*p) { switch (*p) {
case NL: case NL:
case ' ': case ' ':
case TAB: { case TAB:
case CAR: {
break; break;
} }
default: { default: {

View File

@@ -515,6 +515,12 @@ describe('json_decode() function', function()
eq('Vim(call):E474: Attempt to decode a blank string', eq('Vim(call):E474: Attempt to decode a blank string',
exc_exec('call json_decode(" \\t\\n \\n\\t\\t \\n\\t\\n \\n \\t\\n\\t ")')) exc_exec('call json_decode(" \\t\\n \\n\\t\\t \\n\\t\\n \\n \\t\\n\\t ")'))
end) end)
it('accepts all spaces in every position where space may be put', function()
local s = ' \t\n\r \t\r\n \n\t\r \n\r\t \r\t\n \r\n\t\t \n\r\t \r\n\t\n \r\t\n\r \t\r \n\t\r\n \n \t\r\n \r\t\n\t \r\n\t\r \n\r \t\n\r\t \r \t\n\r \n\t\r\t \n\r\t\n \r\n \t\r\n\t'
local str = ('%s{%s"key"%s:%s[%s"val"%s,%s"val2"%s]%s,%s"key2"%s:%s1%s}%s'):gsub('%%s', s)
eq({key={'val', 'val2'}, key2=1}, funcs.json_decode(str))
end)
end) end)
describe('json_encode() function', function() describe('json_encode() function', function()