mirror of
https://github.com/json-c/json-c.git
synced 2026-04-12 00:39:06 +08:00
Issue #407: fix incorrect casts in calls to ctype functions (isdigit and isspace) so we don't crash when asserts are enabled on certain platforms and characters > 128 are parsed.
This commit is contained in:
@@ -838,7 +838,7 @@ static int json_object_double_to_json_string_format(struct json_object* jso,
|
|||||||
format_drops_decimals = 1;
|
format_drops_decimals = 1;
|
||||||
|
|
||||||
if (size < (int)sizeof(buf) - 2 &&
|
if (size < (int)sizeof(buf) - 2 &&
|
||||||
isdigit((int)buf[0]) && /* Looks like *some* kind of number */
|
isdigit((unsigned char)buf[0]) && /* Looks like *some* kind of number */
|
||||||
!p && /* Has no decimal point */
|
!p && /* Has no decimal point */
|
||||||
strchr(buf, 'e') == NULL && /* Not scientific notation */
|
strchr(buf, 'e') == NULL && /* Not scientific notation */
|
||||||
format_drops_decimals)
|
format_drops_decimals)
|
||||||
|
|||||||
@@ -44,7 +44,7 @@ static int is_valid_index(struct json_object *jo, const char *path, int32_t *idx
|
|||||||
/* this code-path optimizes a bit, for when we reference the 0-9 index range in a JSON array
|
/* this code-path optimizes a bit, for when we reference the 0-9 index range in a JSON array
|
||||||
and because leading zeros not allowed */
|
and because leading zeros not allowed */
|
||||||
if (len == 1) {
|
if (len == 1) {
|
||||||
if (isdigit((int)path[0])) {
|
if (isdigit((unsigned char)path[0])) {
|
||||||
*idx = (path[0] - '0');
|
*idx = (path[0] - '0');
|
||||||
goto check_oob;
|
goto check_oob;
|
||||||
}
|
}
|
||||||
@@ -58,7 +58,7 @@ static int is_valid_index(struct json_object *jo, const char *path, int32_t *idx
|
|||||||
}
|
}
|
||||||
/* RFC states base-10 decimals */
|
/* RFC states base-10 decimals */
|
||||||
for (i = 0; i < len; i++) {
|
for (i = 0; i < len; i++) {
|
||||||
if (!isdigit((int)path[i])) {
|
if (!isdigit((unsigned char)path[i])) {
|
||||||
errno = EINVAL;
|
errno = EINVAL;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -295,7 +295,7 @@ struct json_object* json_tokener_parse_ex(struct json_tokener *tok,
|
|||||||
|
|
||||||
case json_tokener_state_eatws:
|
case json_tokener_state_eatws:
|
||||||
/* Advance until we change state */
|
/* Advance until we change state */
|
||||||
while (isspace((int)c)) {
|
while (isspace((unsigned char)c)) {
|
||||||
if ((!ADVANCE_CHAR(str, tok)) || (!PEEK_CHAR(c, tok)))
|
if ((!ADVANCE_CHAR(str, tok)) || (!PEEK_CHAR(c, tok)))
|
||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user