mirror of
https://github.com/json-c/json-c.git
synced 2026-03-13 18:19: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;
|
||||
|
||||
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 */
|
||||
strchr(buf, 'e') == NULL && /* Not scientific notation */
|
||||
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
|
||||
and because leading zeros not allowed */
|
||||
if (len == 1) {
|
||||
if (isdigit((int)path[0])) {
|
||||
if (isdigit((unsigned char)path[0])) {
|
||||
*idx = (path[0] - '0');
|
||||
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 */
|
||||
for (i = 0; i < len; i++) {
|
||||
if (!isdigit((int)path[i])) {
|
||||
if (!isdigit((unsigned char)path[i])) {
|
||||
errno = EINVAL;
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -295,7 +295,7 @@ struct json_object* json_tokener_parse_ex(struct json_tokener *tok,
|
||||
|
||||
case json_tokener_state_eatws:
|
||||
/* Advance until we change state */
|
||||
while (isspace((int)c)) {
|
||||
while (isspace((unsigned char)c)) {
|
||||
if ((!ADVANCE_CHAR(str, tok)) || (!PEEK_CHAR(c, tok)))
|
||||
goto out;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user