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.
This commit is contained in:
@@ -269,7 +269,12 @@ int json_parse_uint64(const char *buf, uint64_t *retval)
|
|||||||
val = strtoull(buf, &end, 10);
|
val = strtoull(buf, &end, 10);
|
||||||
if (end != buf)
|
if (end != buf)
|
||||||
*retval = val;
|
*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
|
#ifndef HAVE_REALLOC
|
||||||
|
|||||||
11
json_util.h
11
json_util.h
@@ -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);
|
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);
|
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);
|
JSON_EXPORT int json_parse_uint64(const char *buf, uint64_t *retval);
|
||||||
/**
|
/**
|
||||||
* @deprecated
|
* @deprecated
|
||||||
|
|||||||
Reference in New Issue
Block a user