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

View File

@@ -515,6 +515,12 @@ describe('json_decode() function', function()
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 ")'))
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)
describe('json_encode() function', function()