Commit 53080e2
committed
stdlib: Reject negative precision in io_lib:format
A negative precision passed via ~.* (e.g. io_lib:format("~.*c", [-1, $a]))
would cause infinite recursion in chars/2 since -1 bsr 1 = -1.
Other controls (~.*f, ~.*s, etc.) would crash with function_clause.
Fix by validating precision >= 0 in precision/2, raising badarg
consistently for all controls. This matches C printf semantics
where negative precision via * is defined behavior (treated as
omitted), but Erlang chooses to reject it explicitly.1 parent abe54f6 commit 53080e2
2 files changed
Lines changed: 25 additions & 3 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
262 | 262 | | |
263 | 263 | | |
264 | 264 | | |
265 | | - | |
| 265 | + | |
| 266 | + | |
| 267 | + | |
| 268 | + | |
| 269 | + | |
| 270 | + | |
266 | 271 | | |
267 | 272 | | |
268 | 273 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
40 | 40 | | |
41 | 41 | | |
42 | 42 | | |
43 | | - | |
| 43 | + | |
44 | 44 | | |
45 | 45 | | |
46 | 46 | | |
| |||
80 | 80 | | |
81 | 81 | | |
82 | 82 | | |
83 | | - | |
| 83 | + | |
84 | 84 | | |
85 | 85 | | |
86 | 86 | | |
| |||
3544 | 3544 | | |
3545 | 3545 | | |
3546 | 3546 | | |
| 3547 | + | |
| 3548 | + | |
| 3549 | + | |
| 3550 | + | |
| 3551 | + | |
| 3552 | + | |
| 3553 | + | |
| 3554 | + | |
| 3555 | + | |
| 3556 | + | |
| 3557 | + | |
| 3558 | + | |
| 3559 | + | |
| 3560 | + | |
| 3561 | + | |
| 3562 | + | |
| 3563 | + | |
3547 | 3564 | | |
3548 | 3565 | | |
3549 | 3566 | | |
| |||
0 commit comments