mirror of
https://github.com/json-c/json-c.git
synced 2026-03-21 22:19:07 +08:00
Fix issue #875: cast to unsigned char so bytes above 0x7f aren't interpreted as negative, which was causing the strict-mode control characters check to incorrectly trigger.
This commit is contained in:
@@ -297,6 +297,7 @@ struct incremental_step
|
||||
{"d", -1, -1, json_tokener_continue, 0, 0},
|
||||
{"1", -1, -1, json_tokener_continue, 0, 0},
|
||||
{"e\"", -1, -1, json_tokener_success, 1, 0},
|
||||
|
||||
/* parse two char at every time */
|
||||
{"\"\\u", -1, -1, json_tokener_continue, 0, 0},
|
||||
{"d8", -1, -1, json_tokener_continue, 0, 0},
|
||||
@@ -322,6 +323,11 @@ struct incremental_step
|
||||
{"\"fff \\ud83d\\ude", -1, -1, json_tokener_continue, 0, 0},
|
||||
{"00 bar\"", -1, -1, json_tokener_success, 1, 0},
|
||||
|
||||
/* Check a utf-8 char (a+umlaut) that has bytes that look negative when
|
||||
char are signed (see also control char check below) */
|
||||
{"\"\xc3\xa4\"", -1, -1, json_tokener_success, 1, 0},
|
||||
{"\"\xc3\xa4\"", -1, -1, json_tokener_success, 1, JSON_TOKENER_STRICT},
|
||||
|
||||
/* Check that json_tokener_reset actually resets */
|
||||
{"{ \"foo", -1, -1, json_tokener_continue, 1, 0},
|
||||
{": \"bar\"}", -1, 0, json_tokener_error_parse_unexpected, 1, 0},
|
||||
@@ -394,8 +400,8 @@ struct incremental_step
|
||||
|
||||
{"Infinity", 9, 8, json_tokener_success, 1, 0},
|
||||
{"infinity", 9, 8, json_tokener_success, 1, 0},
|
||||
{"-infinity", 10, 9, json_tokener_success, 1, 0},
|
||||
{"infinity", 9, 0, json_tokener_error_parse_unexpected, 1, JSON_TOKENER_STRICT},
|
||||
{"-infinity", 10, 9, json_tokener_success, 1, 0},
|
||||
{"-infinity", 10, 1, json_tokener_error_parse_unexpected, 1, JSON_TOKENER_STRICT},
|
||||
|
||||
{"inf", 3, 3, json_tokener_continue, 0, 0},
|
||||
@@ -462,12 +468,15 @@ struct incremental_step
|
||||
{"[18446744073709551616]", 23, 21, json_tokener_error_parse_number, 1, JSON_TOKENER_STRICT},
|
||||
|
||||
/* XXX this seems like a bug, should fail with _error_parse_number instead */
|
||||
{"18446744073709551616", 21, 20, json_tokener_success, 1, 0},
|
||||
{"18446744073709551616", 21, 20, json_tokener_error_parse_eof, 1, JSON_TOKENER_STRICT},
|
||||
|
||||
/* Exceeding integer limits as double parse OK */
|
||||
{"[9223372036854775808.0]", 24, 23, json_tokener_success, 1, 0},
|
||||
{"[-9223372036854775809.0]", 25, 24, json_tokener_success, 1, 0},
|
||||
{"[-9223372036854775809.0]", 25, 24, json_tokener_success, 1, JSON_TOKENER_STRICT},
|
||||
{"[18446744073709551615.0]", 25, 24, json_tokener_success, 1, 0},
|
||||
{"[18446744073709551616.0]", 25, 24, json_tokener_success, 1, 0},
|
||||
{"[18446744073709551616.0]", 25, 24, json_tokener_success, 1, JSON_TOKENER_STRICT},
|
||||
|
||||
/* offset=1 because "n" is the start of "null". hmm... */
|
||||
@@ -524,6 +533,7 @@ struct incremental_step
|
||||
{"\"\\a\"", -1, 2, json_tokener_error_parse_string, 1, 0},
|
||||
|
||||
/* Check '\'' in strict model */
|
||||
{"\'foo\'", -1, 5, json_tokener_success, 1, 0},
|
||||
{"\'foo\'", -1, 0, json_tokener_error_parse_unexpected, 1, JSON_TOKENER_STRICT},
|
||||
|
||||
/* Parse array/object */
|
||||
@@ -544,9 +554,10 @@ struct incremental_step
|
||||
* in what we accept (up to a point).
|
||||
*/
|
||||
{"[1,2,3,]", -1, -1, json_tokener_success, 0, 0},
|
||||
{"[1,2,,3,]", -1, 5, json_tokener_error_parse_unexpected, 0, 0},
|
||||
|
||||
{"[1,2,3,]", -1, 7, json_tokener_error_parse_unexpected, 1, JSON_TOKENER_STRICT},
|
||||
{"[1,2,,3,]", -1, 5, json_tokener_error_parse_unexpected, 0, 0},
|
||||
{"[1,2,,3,]", -1, 5, json_tokener_error_parse_unexpected, 0, JSON_TOKENER_STRICT},
|
||||
|
||||
{"{\"a\":1,}", -1, 7, json_tokener_error_parse_unexpected, 1, JSON_TOKENER_STRICT},
|
||||
|
||||
// utf-8 test
|
||||
@@ -656,7 +667,7 @@ static void test_incremental_parse(void)
|
||||
printf("json_tokener_parse(%s) ... ", string_to_parse);
|
||||
new_obj = json_tokener_parse(string_to_parse);
|
||||
if (new_obj == NULL)
|
||||
puts("got error as expected");
|
||||
printf("%s", "got error as expected\n");
|
||||
|
||||
/* test incremental parsing in various forms */
|
||||
tok = json_tokener_new();
|
||||
|
||||
Reference in New Issue
Block a user