Commit b960bb9
Fix Int.fromString overflow on untrusted parse paths (cross-compiler)
`case Int.fromString s of SOME|NONE` does not catch Overflow: MLton's 32-bit
default int raises it past 2^31 (a crash) while Poly/ML's 63-bit int accepts up
to 2^62 -- a crash and a cross-compiler divergence, the case-form of the earlier
`valOf (Int.fromString ...)` sweep. Fixed on every untrusted-input parse path by
parsing via `IntInf.fromString` with a fixed-literal signed-32-bit bounds check
(or `IntInf` end-to-end for genuinely-64-bit domains like Redis/SQL integers),
returning the site's documented failure (NONE / Err / documented exception) when
out of range. Never `Int.maxInt` (NONE on Poly) or bare `handle Overflow` (only
overflows on MLton). Re-vendored fixed dependencies to keep vendored copies
byte-matching canonical.
Verified: `make test` (MLton) and `make test-poly` (Poly/ML) both green with
byte-identical harness output.
Co-Authored-By: Claude Opus 4.8 <[email protected]>1 parent e70f562 commit b960bb9
3 files changed
Lines changed: 54 additions & 6 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
22 | 22 | | |
23 | 23 | | |
24 | 24 | | |
25 | | - | |
| 25 | + | |
26 | 26 | | |
27 | 27 | | |
28 | 28 | | |
| |||
176 | 176 | | |
177 | 177 | | |
178 | 178 | | |
179 | | - | |
| 179 | + | |
| 180 | + | |
| 181 | + | |
| 182 | + | |
| 183 | + | |
180 | 184 | | |
181 | 185 | | |
182 | 186 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
8 | 8 | | |
9 | 9 | | |
10 | 10 | | |
11 | | - | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
12 | 16 | | |
13 | 17 | | |
14 | 18 | | |
| |||
195 | 199 | | |
196 | 200 | | |
197 | 201 | | |
198 | | - | |
199 | | - | |
200 | | - | |
| 202 | + | |
| 203 | + | |
| 204 | + | |
| 205 | + | |
| 206 | + | |
| 207 | + | |
| 208 | + | |
| 209 | + | |
| 210 | + | |
| 211 | + | |
| 212 | + | |
| 213 | + | |
| 214 | + | |
| 215 | + | |
| 216 | + | |
| 217 | + | |
201 | 218 | | |
202 | 219 | | |
203 | 220 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
106 | 106 | | |
107 | 107 | | |
108 | 108 | | |
| 109 | + | |
| 110 | + | |
| 111 | + | |
| 112 | + | |
| 113 | + | |
| 114 | + | |
| 115 | + | |
| 116 | + | |
| 117 | + | |
| 118 | + | |
| 119 | + | |
| 120 | + | |
| 121 | + | |
| 122 | + | |
| 123 | + | |
| 124 | + | |
| 125 | + | |
| 126 | + | |
| 127 | + | |
| 128 | + | |
| 129 | + | |
| 130 | + | |
| 131 | + | |
| 132 | + | |
| 133 | + | |
| 134 | + | |
| 135 | + | |
109 | 136 | | |
110 | 137 | | |
0 commit comments