mirror of
https://github.com/vim/vim.git
synced 2025-09-24 03:44:06 -04:00
patch 8.0.0216: decoding js style json may fail
Problem: When decoding JSON with a JS style object the JSON test may use a NULL pointer. (Coverity) Solution: Check for a NULL pointer.
This commit is contained in:
12
src/json.c
12
src/json.c
@@ -629,10 +629,13 @@ json_decode_item(js_read_T *reader, typval_T *res, int options)
|
|||||||
key = p = reader->js_buf + reader->js_used;
|
key = p = reader->js_buf + reader->js_used;
|
||||||
while (*p != NUL && *p != ':' && *p > ' ')
|
while (*p != NUL && *p != ':' && *p > ' ')
|
||||||
++p;
|
++p;
|
||||||
cur_item->v_type = VAR_STRING;
|
if (cur_item != NULL)
|
||||||
cur_item->vval.v_string = vim_strnsave(key, (int)(p - key));
|
{
|
||||||
|
cur_item->v_type = VAR_STRING;
|
||||||
|
cur_item->vval.v_string = vim_strnsave(key, (int)(p - key));
|
||||||
|
top_item->jd_key = cur_item->vval.v_string;
|
||||||
|
}
|
||||||
reader->js_used += (int)(p - key);
|
reader->js_used += (int)(p - key);
|
||||||
top_item->jd_key = cur_item->vval.v_string;
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@@ -1053,7 +1056,8 @@ json_decode(js_read_T *reader, typval_T *res, int options)
|
|||||||
|
|
||||||
/*
|
/*
|
||||||
* Decode the JSON from "reader" to find the end of the message.
|
* Decode the JSON from "reader" to find the end of the message.
|
||||||
* "options" can be JSON_JS or zero;
|
* "options" can be JSON_JS or zero.
|
||||||
|
* This is only used for testing.
|
||||||
* Return FAIL if the message has a decoding error.
|
* Return FAIL if the message has a decoding error.
|
||||||
* Return MAYBE if the message is truncated, need to read more.
|
* Return MAYBE if the message is truncated, need to read more.
|
||||||
* This only works reliable if the message contains an object, array or
|
* This only works reliable if the message contains an object, array or
|
||||||
|
@@ -107,6 +107,12 @@ test_decode_find_end(void)
|
|||||||
reader.js_buf = (char_u *)" { ";
|
reader.js_buf = (char_u *)" { ";
|
||||||
assert(json_find_end(&reader, 0) == MAYBE);
|
assert(json_find_end(&reader, 0) == MAYBE);
|
||||||
|
|
||||||
|
/* JS object with white space */
|
||||||
|
reader.js_buf = (char_u *)" { a : 123 } ";
|
||||||
|
assert(json_find_end(&reader, JSON_JS) == OK);
|
||||||
|
reader.js_buf = (char_u *)" { a : ";
|
||||||
|
assert(json_find_end(&reader, JSON_JS) == MAYBE);
|
||||||
|
|
||||||
/* array without white space */
|
/* array without white space */
|
||||||
reader.js_buf = (char_u *)"[\"a\",123]";
|
reader.js_buf = (char_u *)"[\"a\",123]";
|
||||||
assert(json_find_end(&reader, 0) == OK);
|
assert(json_find_end(&reader, 0) == OK);
|
||||||
|
@@ -764,6 +764,8 @@ static char *(features[]) =
|
|||||||
|
|
||||||
static int included_patches[] =
|
static int included_patches[] =
|
||||||
{ /* Add new patch number below this line */
|
{ /* Add new patch number below this line */
|
||||||
|
/**/
|
||||||
|
216,
|
||||||
/**/
|
/**/
|
||||||
215,
|
215,
|
||||||
/**/
|
/**/
|
||||||
|
Reference in New Issue
Block a user