Browse Source

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.

tags/json-c-0.14-20200419
Eric Haszlakiewicz 7 years ago
parent
commit
f8c632f579
3 changed files with 4 additions and 4 deletions
  1. +1
    -1
      json_object.c
  2. +2
    -2
      json_pointer.c
  3. +1
    -1
      json_tokener.c

+ 1
- 1
json_object.c View File

@@ -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)


+ 2
- 2
json_pointer.c View File

@@ -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;
}


+ 1
- 1
json_tokener.c View File

@@ -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;
}


Loading…
Cancel
Save