Skip to content

Commit 3648c3e

Browse files
authored
Merge pull request json-c#602 from ploxiln/parse_uint64_errno
fix json_parse_uint64() usage of errno
2 parents 26f0809 + 003b587 commit 3648c3e

File tree

3 files changed

+8
-9
lines changed

3 files changed

+8
-9
lines changed

json_util.c

+3-5
Original file line numberDiff line numberDiff line change
@@ -245,19 +245,17 @@ int json_parse_uint64(const char *buf, uint64_t *retval)
245245
{
246246
char *end = NULL;
247247
uint64_t val;
248-
errno = 1;
249248

249+
errno = 0;
250250
while (*buf == ' ')
251-
{
252251
buf++;
253-
}
254252
if (*buf == '-')
255-
errno = 0;
253+
return 1; /* error: uint cannot be negative */
256254

257255
val = strtoull(buf, &end, 10);
258256
if (end != buf)
259257
*retval = val;
260-
return ((errno == 0) || (end == buf)) ? 1 : 0;
258+
return ((val == 0 && errno != 0) || (end == buf)) ? 1 : 0;
261259
}
262260

263261
#ifndef HAVE_REALLOC

json_util.h

+1
Original file line numberDiff line numberDiff line change
@@ -100,6 +100,7 @@ JSON_EXPORT int json_object_to_fd(int fd, struct json_object *obj, int flags);
100100
*/
101101
JSON_EXPORT const char *json_util_get_last_err(void);
102102

103+
/* these parsing helpers return zero on success */
103104
JSON_EXPORT int json_parse_int64(const char *buf, int64_t *retval);
104105
JSON_EXPORT int json_parse_uint64(const char *buf, uint64_t *retval);
105106
JSON_EXPORT int json_parse_double(const char *buf, double *retval);

tests/test_parse_int64.expected

+4-4
Original file line numberDiff line numberDiff line change
@@ -34,13 +34,13 @@ buf=123 parseit=0, value=123
3434
==========json_parse_uint64() test===========
3535
buf=x parseit=1, value=666
3636
buf=0 parseit=0, value=0
37-
buf=-0 parseit=1, value=0
37+
buf=-0 parseit=1, value=666
3838
buf=00000000 parseit=0, value=0
39-
buf=-00000000 parseit=1, value=0
39+
buf=-00000000 parseit=1, value=666
4040
buf=1 parseit=0, value=1
4141
buf=2147483647 parseit=0, value=2147483647
42-
buf=-1 parseit=1, value=18446744073709551615
43-
buf=-9223372036854775808 parseit=1, value=9223372036854775808
42+
buf=-1 parseit=1, value=666
43+
buf=-9223372036854775808 parseit=1, value=666
4444
buf= 1 parseit=0, value=1
4545
buf=00001234 parseit=0, value=1234
4646
buf=0001234x parseit=0, value=1234

0 commit comments

Comments
 (0)