Commit afbc154
committed
fix(printf): compute asterisk width magnitude in unsigned arithmetic
A negative '*' field width argument of i64::MIN used to panic with
attempt to negate with overflow because |i64::MIN| = 2^63 is not
representable in i64/isize. Use nb.unsigned_abs() to compute the
magnitude in unsigned arithmetic, which can represent 2^63.
Add a unit test for the width resolution and an end-to-end regression
test verifying printf fails gracefully with a write error instead of
panicking.
Fixes #137661 parent ec7e986 commit afbc154
2 files changed
Lines changed: 38 additions & 1 deletion
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
511 | 511 | | |
512 | 512 | | |
513 | 513 | | |
514 | | - | |
| 514 | + | |
| 515 | + | |
515 | 516 | | |
516 | 517 | | |
517 | 518 | | |
| |||
670 | 671 | | |
671 | 672 | | |
672 | 673 | | |
| 674 | + | |
| 675 | + | |
| 676 | + | |
| 677 | + | |
| 678 | + | |
| 679 | + | |
| 680 | + | |
| 681 | + | |
| 682 | + | |
| 683 | + | |
| 684 | + | |
| 685 | + | |
| 686 | + | |
| 687 | + | |
| 688 | + | |
| 689 | + | |
| 690 | + | |
| 691 | + | |
| 692 | + | |
| 693 | + | |
673 | 694 | | |
674 | 695 | | |
675 | 696 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1538 | 1538 | | |
1539 | 1539 | | |
1540 | 1540 | | |
| 1541 | + | |
| 1542 | + | |
| 1543 | + | |
| 1544 | + | |
| 1545 | + | |
| 1546 | + | |
| 1547 | + | |
| 1548 | + | |
| 1549 | + | |
| 1550 | + | |
| 1551 | + | |
| 1552 | + | |
| 1553 | + | |
| 1554 | + | |
| 1555 | + | |
| 1556 | + | |
1541 | 1557 | | |
1542 | 1558 | | |
1543 | 1559 | | |
| |||
0 commit comments