Browse Source

Apply same EINVAL handling to json_parse_uint64() as was done for json_parse_int64(). Document that overflow/underflow for these functions is not an error, but sets errno=ERANGE.

tags/json-c-0.17-20230812
Eric Haszlakiewicz 2 years ago
parent
commit
c50bf9df9c
2 changed files with 16 additions and 2 deletions
  1. +6
    -1
      json_util.c
  2. +10
    -1
      json_util.h

+ 6
- 1
json_util.c View File

@@ -269,7 +269,12 @@ int json_parse_uint64(const char *buf, uint64_t *retval)
val = strtoull(buf, &end, 10);
if (end != buf)
*retval = val;
return ((val == 0 && errno != 0) || (end == buf)) ? 1 : 0;
if ((val == 0 && errno != 0) || (end == buf))
{
errno = EINVAL;
return 1;
}
return 0;
}

#ifndef HAVE_REALLOC


+ 10
- 1
json_util.h View File

@@ -100,8 +100,17 @@ JSON_EXPORT int json_object_to_fd(int fd, struct json_object *obj, int flags);
*/
JSON_EXPORT const char *json_util_get_last_err(void);

/* these parsing helpers return zero on success */
/**
* A parsing helper for integer values. Returns 0 on success,
* with the parsed value assigned to *retval. Overflow/underflow
* are NOT considered errors, but errno will be set to ERANGE,
* just like the strtol/strtoll functions do.
*/
JSON_EXPORT int json_parse_int64(const char *buf, int64_t *retval);
/**
* A parsing help for integer values, providing one extra bit of
* magnitude beyond json_parse_int64().
*/
JSON_EXPORT int json_parse_uint64(const char *buf, uint64_t *retval);
/**
* @deprecated


Loading…
Cancel
Save