Index: usr.bin/printf/printf.c =================================================================== RCS file: /home/netbsd/src/usr.bin/printf/printf.c,v retrieving revision 1.50 diff -p -u -r1.50 printf.c --- usr.bin/printf/printf.c 22 Jul 2019 17:34:31 -0000 1.50 +++ usr.bin/printf/printf.c 23 Oct 2020 07:56:32 -0000 @@ -651,7 +651,7 @@ getstr(void) static int getwidth(void) { - unsigned long val; + uintmax_t val; char *s, *ep; s = *gargv; @@ -660,7 +660,7 @@ getwidth(void) gargv++; errno = 0; - val = strtoul(s, &ep, 0); + val = strtoumax(s, &ep, 0); check_conversion(s, ep); /* Arbitrarily 'restrict' field widths to 1Mbyte */ @@ -687,7 +687,7 @@ getintmax(void) return *(cp + 1); errno = 0; - val = strtoimax(cp, &ep, 0); + val = (intmax_t)strtoumax(cp, &ep, 0); check_conversion(cp, ep); return val; } Index: tests/usr.bin/printf/printf.sh =================================================================== RCS file: /home/netbsd/src/tests/usr.bin/printf/printf.sh,v retrieving revision 1.6 diff -p -u -r1.6 printf.sh --- tests/usr.bin/printf/printf.sh 24 Apr 2020 14:29:19 -0000 1.6 +++ tests/usr.bin/printf/printf.sh 23 Oct 2020 08:43:20 -0000 @@ -445,6 +445,10 @@ d_decimal() expect '-09 ' '%- +4.2d' -9 expect '+09 ' '% +-4.2d' 9 + # numbers whose absolute values exceed INTMAX_MAX + expect -70368744177664 %d 0xffffc00000000000 + expect 70368744177664 %d -0xffffc00000000000 + expect_fail '0' %d junk expect_fail '123' %d 123kb expect_fail '15' %d 0xfooD @@ -554,6 +558,10 @@ u_unsigned() expect ! '-*' '%+u' -7 + # numbers whose absolute values exceed INTMAX_MAX + expect 18446673704965373952 %u 0xffffc00000000000 + expect 70368744177664 %u -0xffffc00000000000 + expect_fail '0' %u junk expect_fail '123' %u 123kb expect_fail '15' %u 0xfooD @@ -675,6 +683,10 @@ x_hex() expect '*fffabc' %x -1348 expect '*ff3502' %x -0xCAFE + # numbers whose absolute values are larger than INTMAX_MAX + expect ffffc00000000000 %x 0xffffc00000000000 + expect 400000000000 %x -0xffffc00000000000 + expect_fail '0 1 2' %x%2x%2x junk 1 2 expect_fail '3 1 2' %x%2x%2x 3 1+1 2