introduced in #542 fixes #601tags/json-c-0.15-20200726
| @@ -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 | ||||
| @@ -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); | ||||
| @@ -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=-9223372036854775808 parseit=1, value=9223372036854775808 | |||||
| buf=-1 parseit=1, value=666 | |||||
| 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 | ||||