fix json_parse_uint64() usage of errno

introduced in #542
fixes #601
This commit is contained in:
Pierce Lopez
2020-05-10 13:20:02 -04:00
parent 26f080997d
commit 003b58782b
3 changed files with 8 additions and 9 deletions

View File

@@ -245,19 +245,17 @@ int json_parse_uint64(const char *buf, uint64_t *retval)
{ {
char *end = NULL; char *end = NULL;
uint64_t val; uint64_t val;
errno = 1;
errno = 0;
while (*buf == ' ') while (*buf == ' ')
{
buf++; buf++;
}
if (*buf == '-') if (*buf == '-')
errno = 0; return 1; /* error: uint cannot be negative */
val = strtoull(buf, &end, 10); val = strtoull(buf, &end, 10);
if (end != buf) if (end != buf)
*retval = val; *retval = val;
return ((errno == 0) || (end == buf)) ? 1 : 0; return ((val == 0 && errno != 0) || (end == buf)) ? 1 : 0;
} }
#ifndef HAVE_REALLOC #ifndef HAVE_REALLOC

View File

@@ -100,6 +100,7 @@ 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 */
JSON_EXPORT int json_parse_int64(const char *buf, int64_t *retval); JSON_EXPORT int json_parse_int64(const char *buf, int64_t *retval);
JSON_EXPORT int json_parse_uint64(const char *buf, uint64_t *retval); JSON_EXPORT int json_parse_uint64(const char *buf, uint64_t *retval);
JSON_EXPORT int json_parse_double(const char *buf, double *retval); JSON_EXPORT int json_parse_double(const char *buf, double *retval);

View File

@@ -34,13 +34,13 @@ buf=123 parseit=0, value=123
==========json_parse_uint64() test=========== ==========json_parse_uint64() test===========
buf=x parseit=1, value=666 buf=x parseit=1, value=666
buf=0 parseit=0, value=0 buf=0 parseit=0, value=0
buf=-0 parseit=1, value=0 buf=-0 parseit=1, value=666
buf=00000000 parseit=0, value=0 buf=00000000 parseit=0, value=0
buf=-00000000 parseit=1, value=0 buf=-00000000 parseit=1, value=666
buf=1 parseit=0, value=1 buf=1 parseit=0, value=1
buf=2147483647 parseit=0, value=2147483647 buf=2147483647 parseit=0, value=2147483647
buf=-1 parseit=1, value=18446744073709551615 buf=-1 parseit=1, value=666
buf=-9223372036854775808 parseit=1, value=9223372036854775808 buf=-9223372036854775808 parseit=1, value=666
buf= 1 parseit=0, value=1 buf= 1 parseit=0, value=1
buf=00001234 parseit=0, value=1234 buf=00001234 parseit=0, value=1234
buf=0001234x parseit=0, value=1234 buf=0001234x parseit=0, value=1234