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