key = p = reader->js_buf + reader->js_used;
while (*p != NUL && *p != ':' && *p > ' ')
++p;
- cur_item->v_type = VAR_STRING;
- cur_item->vval.v_string = vim_strnsave(key, (int)(p - key));
+ if (cur_item != NULL)
+ {
+ 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);
- top_item->jd_key = cur_item->vval.v_string;
}
else
{
/*
* 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 MAYBE if the message is truncated, need to read more.
* This only works reliable if the message contains an object, array or
reader.js_buf = (char_u *)" { ";
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 */
reader.js_buf = (char_u *)"[\"a\",123]";
assert(json_find_end(&reader, 0) == OK);