Skip to content

Commit 9e67711

Browse files
committed
py/mpprint: Fix sign extension when printf'ing %u, %x and %X.
1 parent 331a481 commit 9e67711

File tree

3 files changed

+11
-3
lines changed

3 files changed

+11
-3
lines changed

py/mpprint.c

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -494,16 +494,16 @@ int mp_vprintf(const mp_print_t *print, const char *fmt, va_list args) {
494494
break;
495495
}
496496
case 'u':
497-
chrs += mp_print_int(print, va_arg(args, int), 0, 10, 'a', flags, fill, width);
497+
chrs += mp_print_int(print, va_arg(args, unsigned int), 0, 10, 'a', flags, fill, width);
498498
break;
499499
case 'd':
500500
chrs += mp_print_int(print, va_arg(args, int), 1, 10, 'a', flags, fill, width);
501501
break;
502502
case 'x':
503-
chrs += mp_print_int(print, va_arg(args, int), 0, 16, 'a', flags, fill, width);
503+
chrs += mp_print_int(print, va_arg(args, unsigned int), 0, 16, 'a', flags, fill, width);
504504
break;
505505
case 'X':
506-
chrs += mp_print_int(print, va_arg(args, int), 0, 16, 'A', flags, fill, width);
506+
chrs += mp_print_int(print, va_arg(args, unsigned int), 0, 16, 'A', flags, fill, width);
507507
break;
508508
case 'p':
509509
case 'P': // don't bother to handle upcase for 'P'

tests/unix/extra_coverage.py.exp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,10 @@ ab abc
88
false true
99
(null)
1010
t
11+
-2147483648
12+
2147483648
13+
80000000
14+
80000000
1115
# vstr
1216
tests
1317
sts

unix/coverage.c

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,10 @@ STATIC mp_obj_t extra_coverage(void) {
2222
mp_printf(&mp_plat_print, "%b %b\n", 0, 1); // bools
2323
mp_printf(&mp_plat_print, "%s\n", NULL); // null string
2424
mp_printf(&mp_plat_print, "%t\n"); // non-format char
25+
mp_printf(&mp_plat_print, "%d\n", 0x80000000); // should print signed
26+
mp_printf(&mp_plat_print, "%u\n", 0x80000000); // should print unsigned
27+
mp_printf(&mp_plat_print, "%x\n", 0x80000000); // should print unsigned
28+
mp_printf(&mp_plat_print, "%X\n", 0x80000000); // should print unsigned
2529
}
2630

2731
// vstr

0 commit comments

Comments
 (0)