Commit 50425c9
authored
fix(awk): make expression format errors fatal (#2458)
## What changed
AWK formatting errors inside `sprintf` expressions now stop the AWK
program with exit 2 and a fatal diagnostic. Direct `printf` uses the
same error behavior. Scripts and agents no longer receive a successful
result after a rejected format width or precision.
Closes #2456.
## Why
`sprintf("%10001s", "x")` printed an error but yielded an empty string
and exit 0. A later calculation could look complete although the format
cap had been hit.
## Before / After
Before: `awk 'BEGIN { s=sprintf("%10001s","x"); print length(s) }'`
printed `0`, reported the width error, and exited 0.
After: the same command prints no stdout, reports `awk: fatal: format
width 10001 exceeds maximum (10000)`, and exits 2. The focused
`builtin_cap_security_tests::awk_format` suite passes all 3 tests; the
bash spec suite and 100 awk unit tests pass.
## Risk
- Low. Programs that relied on successful exit after an invalid AWK
format now receive exit 2. Formatting within the cap is unchanged.
- Local `just pre-pr` exposed two SQLite CSV differential failures
against macOS host `sqlite3`; this PR does not change SQLite. Required
Linux CI is the merge gate.
## Checklist
- [x] Tests added or updated
- [x] Backward compatibility considered1 parent 51f5d00 commit 50425c9
5 files changed
Lines changed: 60 additions & 14 deletions
File tree
- crates/bashkit
- docs
- src/builtins/awk
- tests
- integration
- spec_cases/bash
- knowledge/security
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
109 | 109 | | |
110 | 110 | | |
111 | 111 | | |
112 | | - | |
| 112 | + | |
113 | 113 | | |
114 | 114 | | |
115 | 115 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
840 | 840 | | |
841 | 841 | | |
842 | 842 | | |
| 843 | + | |
| 844 | + | |
843 | 845 | | |
844 | 846 | | |
845 | 847 | | |
846 | | - | |
847 | | - | |
848 | | - | |
| 848 | + | |
| 849 | + | |
849 | 850 | | |
850 | 851 | | |
851 | 852 | | |
| |||
1244 | 1245 | | |
1245 | 1246 | | |
1246 | 1247 | | |
1247 | | - | |
| 1248 | + | |
1248 | 1249 | | |
1249 | 1250 | | |
1250 | 1251 | | |
| |||
1269 | 1270 | | |
1270 | 1271 | | |
1271 | 1272 | | |
1272 | | - | |
| 1273 | + | |
1273 | 1274 | | |
1274 | 1275 | | |
1275 | 1276 | | |
| |||
1542 | 1543 | | |
1543 | 1544 | | |
1544 | 1545 | | |
1545 | | - | |
1546 | | - | |
1547 | | - | |
1548 | | - | |
1549 | | - | |
| 1546 | + | |
1550 | 1547 | | |
1551 | 1548 | | |
1552 | 1549 | | |
| |||
Lines changed: 49 additions & 0 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
126 | 126 | | |
127 | 127 | | |
128 | 128 | | |
| 129 | + | |
| 130 | + | |
| 131 | + | |
| 132 | + | |
| 133 | + | |
| 134 | + | |
| 135 | + | |
| 136 | + | |
| 137 | + | |
| 138 | + | |
| 139 | + | |
| 140 | + | |
| 141 | + | |
| 142 | + | |
| 143 | + | |
| 144 | + | |
| 145 | + | |
| 146 | + | |
| 147 | + | |
| 148 | + | |
| 149 | + | |
| 150 | + | |
| 151 | + | |
| 152 | + | |
| 153 | + | |
| 154 | + | |
| 155 | + | |
| 156 | + | |
| 157 | + | |
| 158 | + | |
| 159 | + | |
| 160 | + | |
| 161 | + | |
| 162 | + | |
| 163 | + | |
| 164 | + | |
| 165 | + | |
| 166 | + | |
| 167 | + | |
| 168 | + | |
| 169 | + | |
| 170 | + | |
| 171 | + | |
| 172 | + | |
| 173 | + | |
| 174 | + | |
| 175 | + | |
| 176 | + | |
| 177 | + | |
129 | 178 | | |
130 | 179 | | |
131 | 180 | | |
| |||
Lines changed: 2 additions & 2 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
4 | 4 | | |
5 | 5 | | |
6 | 6 | | |
7 | | - | |
| 7 | + | |
8 | 8 | | |
9 | 9 | | |
10 | 10 | | |
| |||
28 | 28 | | |
29 | 29 | | |
30 | 30 | | |
31 | | - | |
| 31 | + | |
32 | 32 | | |
33 | 33 | | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
276 | 276 | | |
277 | 277 | | |
278 | 278 | | |
279 | | - | |
| 279 | + | |
280 | 280 | | |
281 | 281 | | |
282 | 282 | | |
| |||
0 commit comments