It looks like parsing an ERANGE integer results in all consecutive parses failing with an ERANGE.pull/64/head
@@ -12,7 +12,7 @@ void checkit(const char *buf) | |||||
int64_t cint64 = -666; | int64_t cint64 = -666; | ||||
int retval = json_parse_int64(buf, &cint64); | int retval = json_parse_int64(buf, &cint64); | ||||
printf("buf=%s parseit=%d, value=%" PRId64 " \n", buf, retval, cint64); | |||||
printf("buf=%s parseit=%d, value=%" PRId64 "\n", buf, retval, cint64); | |||||
} | } | ||||
/** | /** | ||||
@@ -101,5 +101,8 @@ int main() | |||||
strcpy(buf, "-18446744073709551616"); // -UINT64_MAX | strcpy(buf, "-18446744073709551616"); // -UINT64_MAX | ||||
checkit(buf); | checkit(buf); | ||||
strcpy(buf, "1"); | |||||
checkit(buf); | |||||
return 0; | return 0; | ||||
} | } |
@@ -1,26 +1,27 @@ | |||||
buf=x parseit=1, value=-666 | |||||
buf=0 parseit=0, value=0 | |||||
buf=-0 parseit=0, value=0 | |||||
buf=00000000 parseit=0, value=0 | |||||
buf=-00000000 parseit=0, value=0 | |||||
buf=1 parseit=0, value=1 | |||||
buf=2147483647 parseit=0, value=2147483647 | |||||
buf=-1 parseit=0, value=-1 | |||||
buf= -1 parseit=0, value=-1 | |||||
buf=00001234 parseit=0, value=1234 | |||||
buf=0001234x parseit=0, value=1234 | |||||
buf=-00001234 parseit=0, value=-1234 | |||||
buf=-00001234x parseit=0, value=-1234 | |||||
buf=21474836470 parseit=0, value=21474836470 | |||||
buf=31474836470 parseit=0, value=31474836470 | |||||
buf=-2147483647 parseit=0, value=-2147483647 | |||||
buf=-2147483648 parseit=0, value=-2147483648 | |||||
buf=-2147483649 parseit=0, value=-2147483649 | |||||
buf=-21474836480 parseit=0, value=-21474836480 | |||||
buf=9223372036854775807 parseit=0, value=9223372036854775807 | |||||
buf=9223372036854775808 parseit=0, value=9223372036854775807 | |||||
buf=-9223372036854775808 parseit=0, value=-9223372036854775808 | |||||
buf=-9223372036854775809 parseit=0, value=-9223372036854775808 | |||||
buf=18446744073709551615 parseit=0, value=9223372036854775807 | |||||
buf=18446744073709551616 parseit=0, value=9223372036854775807 | |||||
buf=-18446744073709551616 parseit=0, value=-9223372036854775808 | |||||
buf=x parseit=1, value=-666 | |||||
buf=0 parseit=0, value=0 | |||||
buf=-0 parseit=0, value=0 | |||||
buf=00000000 parseit=0, value=0 | |||||
buf=-00000000 parseit=0, value=0 | |||||
buf=1 parseit=0, value=1 | |||||
buf=2147483647 parseit=0, value=2147483647 | |||||
buf=-1 parseit=0, value=-1 | |||||
buf= -1 parseit=0, value=-1 | |||||
buf=00001234 parseit=0, value=1234 | |||||
buf=0001234x parseit=0, value=1234 | |||||
buf=-00001234 parseit=0, value=-1234 | |||||
buf=-00001234x parseit=0, value=-1234 | |||||
buf=21474836470 parseit=0, value=21474836470 | |||||
buf=31474836470 parseit=0, value=31474836470 | |||||
buf=-2147483647 parseit=0, value=-2147483647 | |||||
buf=-2147483648 parseit=0, value=-2147483648 | |||||
buf=-2147483649 parseit=0, value=-2147483649 | |||||
buf=-21474836480 parseit=0, value=-21474836480 | |||||
buf=9223372036854775807 parseit=0, value=9223372036854775807 | |||||
buf=9223372036854775808 parseit=0, value=9223372036854775807 | |||||
buf=-9223372036854775808 parseit=0, value=-9223372036854775808 | |||||
buf=-9223372036854775809 parseit=0, value=-9223372036854775808 | |||||
buf=18446744073709551615 parseit=0, value=9223372036854775807 | |||||
buf=18446744073709551616 parseit=0, value=9223372036854775807 | |||||
buf=-18446744073709551616 parseit=0, value=-9223372036854775808 | |||||
buf=1 parseit=0, value=1 |
@@ -14,7 +14,7 @@ static void test_printbuf_memset_length(void); | |||||
static void test_basic_printbuf_memset() | static void test_basic_printbuf_memset() | ||||
{ | { | ||||
struct printbuf *pb; | struct printbuf *pb; | ||||
printf("%s: starting test\n", __func__); | printf("%s: starting test\n", __func__); | ||||
pb = printbuf_new(); | pb = printbuf_new(); | ||||
sprintbuf(pb, "blue:%d", 1); | sprintbuf(pb, "blue:%d", 1); | ||||
@@ -104,7 +104,7 @@ static void test_printbuf_memappend(int *before_resize) | |||||
memset(data, 'X', *before_resize + 1); | memset(data, 'X', *before_resize + 1); | ||||
printbuf_memappend_fast(pb, data, *before_resize + 1); | printbuf_memappend_fast(pb, data, *before_resize + 1); | ||||
printf("Append to just after resize: %d, [%s]\n", printbuf_length(pb), pb->buf); | printf("Append to just after resize: %d, [%s]\n", printbuf_length(pb), pb->buf); | ||||
free(data); | free(data); | ||||
printbuf_free(pb); | printbuf_free(pb); | ||||
@@ -124,7 +124,7 @@ static void test_sprintbuf(int before_resize) | |||||
memset(data, 'X', before_resize + 1 + 1); | memset(data, 'X', before_resize + 1 + 1); | ||||
data[before_resize + 1] = '\0'; | data[before_resize + 1] = '\0'; | ||||
sprintbuf(pb, "%s", data); | sprintbuf(pb, "%s", data); | ||||
printf("sprintbuf to just after resize(%d+1): %d, [%s], strlen(buf)=%d\n", before_resize, printbuf_length(pb), pb->buf, strlen(pb->buf)); | |||||
printf("sprintbuf to just after resize(%d+1): %d, [%s], strlen(buf)=%d\n", before_resize, printbuf_length(pb), pb->buf, (int) strlen(pb->buf)); | |||||
printbuf_reset(pb); | printbuf_reset(pb); | ||||
sprintbuf(pb, "plain"); | sprintbuf(pb, "plain"); | ||||