Commit d1161df
committed
Bound non-null-terminated value scanners against end of input
Several JSON value scanners dereference *it without an end check, relying on
the trailing '\0' sentinel that only exists for null-terminated buffers. On a
non-null-terminated buffer (opts.null_terminated = false) there is no
sentinel, so truncated or boundary input reads one or more bytes past the end
(heap-buffer-overflow under ASAN). Each fix leaves the null-terminated fast
path byte-for-byte unchanged and bounds only the non-null-terminated path:
- skip_number (non-validating): gate the digit scan on it < end when not
null-terminated (skip_number_opts gains a null_terminated field).
- skip_number_with_validation: guard each standalone *it read with it != end
(the find_if_not scans were already end-bounded).
- number_of_array_elements: bound the element pre-scan loop on it == end.
- skip_string (non-padded, validating): bound the scan loop and the
post-backslash read (skip_string_opts gains a null_terminated field).
- NDJSON read_new_lines: bound the inter-record newline scan on it != end.
Adds a non_null_terminated_scanner_bounds suite exercising each scanner at its
buffer boundary; these run under the ASAN CI job.1 parent 2ceef98 commit d1161df
4 files changed
Lines changed: 231 additions & 32 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
56 | 56 | | |
57 | 57 | | |
58 | 58 | | |
59 | | - | |
60 | | - | |
61 | | - | |
| 59 | + | |
| 60 | + | |
| 61 | + | |
| 62 | + | |
| 63 | + | |
62 | 64 | | |
| 65 | + | |
| 66 | + | |
| 67 | + | |
| 68 | + | |
| 69 | + | |
| 70 | + | |
| 71 | + | |
63 | 72 | | |
64 | | - | |
65 | | - | |
66 | | - | |
| 73 | + | |
| 74 | + | |
67 | 75 | | |
68 | 76 | | |
69 | | - | |
70 | | - | |
| 77 | + | |
| 78 | + | |
| 79 | + | |
| 80 | + | |
| 81 | + | |
| 82 | + | |
| 83 | + | |
| 84 | + | |
| 85 | + | |
| 86 | + | |
| 87 | + | |
| 88 | + | |
| 89 | + | |
| 90 | + | |
71 | 91 | | |
72 | 92 | | |
73 | 93 | | |
| |||
126 | 146 | | |
127 | 147 | | |
128 | 148 | | |
129 | | - | |
130 | | - | |
131 | | - | |
| 149 | + | |
| 150 | + | |
| 151 | + | |
| 152 | + | |
| 153 | + | |
132 | 154 | | |
| 155 | + | |
| 156 | + | |
| 157 | + | |
| 158 | + | |
| 159 | + | |
| 160 | + | |
| 161 | + | |
133 | 162 | | |
134 | | - | |
135 | | - | |
136 | | - | |
| 163 | + | |
| 164 | + | |
137 | 165 | | |
138 | 166 | | |
139 | | - | |
140 | | - | |
| 167 | + | |
| 168 | + | |
| 169 | + | |
| 170 | + | |
| 171 | + | |
| 172 | + | |
| 173 | + | |
| 174 | + | |
| 175 | + | |
| 176 | + | |
| 177 | + | |
| 178 | + | |
| 179 | + | |
| 180 | + | |
141 | 181 | | |
142 | 182 | | |
143 | 183 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
2549 | 2549 | | |
2550 | 2550 | | |
2551 | 2551 | | |
| 2552 | + | |
| 2553 | + | |
| 2554 | + | |
| 2555 | + | |
| 2556 | + | |
| 2557 | + | |
2552 | 2558 | | |
2553 | 2559 | | |
2554 | 2560 | | |
2555 | 2561 | | |
2556 | 2562 | | |
| 2563 | + | |
| 2564 | + | |
| 2565 | + | |
| 2566 | + | |
| 2567 | + | |
| 2568 | + | |
| 2569 | + | |
| 2570 | + | |
2557 | 2571 | | |
2558 | 2572 | | |
2559 | 2573 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
745 | 745 | | |
746 | 746 | | |
747 | 747 | | |
| 748 | + | |
748 | 749 | | |
749 | 750 | | |
750 | 751 | | |
751 | 752 | | |
752 | 753 | | |
753 | 754 | | |
754 | | - | |
| 755 | + | |
| 756 | + | |
755 | 757 | | |
756 | 758 | | |
757 | | - | |
758 | | - | |
759 | | - | |
| 759 | + | |
| 760 | + | |
| 761 | + | |
| 762 | + | |
| 763 | + | |
| 764 | + | |
| 765 | + | |
| 766 | + | |
| 767 | + | |
760 | 768 | | |
761 | 769 | | |
762 | 770 | | |
| |||
863 | 871 | | |
864 | 872 | | |
865 | 873 | | |
| 874 | + | |
| 875 | + | |
| 876 | + | |
| 877 | + | |
| 878 | + | |
| 879 | + | |
| 880 | + | |
| 881 | + | |
| 882 | + | |
866 | 883 | | |
867 | 884 | | |
868 | 885 | | |
| |||
875 | 892 | | |
876 | 893 | | |
877 | 894 | | |
| 895 | + | |
| 896 | + | |
| 897 | + | |
| 898 | + | |
| 899 | + | |
| 900 | + | |
878 | 901 | | |
879 | 902 | | |
880 | 903 | | |
| |||
1239 | 1262 | | |
1240 | 1263 | | |
1241 | 1264 | | |
1242 | | - | |
| 1265 | + | |
| 1266 | + | |
| 1267 | + | |
| 1268 | + | |
| 1269 | + | |
| 1270 | + | |
1243 | 1271 | | |
1244 | 1272 | | |
1245 | | - | |
| 1273 | + | |
1246 | 1274 | | |
1247 | | - | |
| 1275 | + | |
1248 | 1276 | | |
1249 | 1277 | | |
1250 | 1278 | | |
| |||
1255 | 1283 | | |
1256 | 1284 | | |
1257 | 1285 | | |
1258 | | - | |
| 1286 | + | |
1259 | 1287 | | |
1260 | 1288 | | |
1261 | 1289 | | |
1262 | | - | |
| 1290 | + | |
1263 | 1291 | | |
1264 | 1292 | | |
1265 | 1293 | | |
| |||
1268 | 1296 | | |
1269 | 1297 | | |
1270 | 1298 | | |
1271 | | - | |
| 1299 | + | |
1272 | 1300 | | |
1273 | 1301 | | |
1274 | | - | |
| 1302 | + | |
1275 | 1303 | | |
1276 | 1304 | | |
1277 | 1305 | | |
| |||
1284 | 1312 | | |
1285 | 1313 | | |
1286 | 1314 | | |
| 1315 | + | |
1287 | 1316 | | |
1288 | | - | |
| 1317 | + | |
1289 | 1318 | | |
1290 | | - | |
| 1319 | + | |
| 1320 | + | |
1291 | 1321 | | |
1292 | 1322 | | |
1293 | 1323 | | |
1294 | | - | |
| 1324 | + | |
| 1325 | + | |
| 1326 | + | |
1295 | 1327 | | |
1296 | 1328 | | |
1297 | 1329 | | |
1298 | 1330 | | |
1299 | 1331 | | |
1300 | 1332 | | |
1301 | | - | |
1302 | | - | |
| 1333 | + | |
| 1334 | + | |
| 1335 | + | |
| 1336 | + | |
| 1337 | + | |
| 1338 | + | |
| 1339 | + | |
| 1340 | + | |
| 1341 | + | |
| 1342 | + | |
1303 | 1343 | | |
1304 | 1344 | | |
1305 | 1345 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
2269 | 2269 | | |
2270 | 2270 | | |
2271 | 2271 | | |
| 2272 | + | |
| 2273 | + | |
| 2274 | + | |
| 2275 | + | |
| 2276 | + | |
| 2277 | + | |
| 2278 | + | |
| 2279 | + | |
| 2280 | + | |
| 2281 | + | |
| 2282 | + | |
| 2283 | + | |
| 2284 | + | |
| 2285 | + | |
| 2286 | + | |
| 2287 | + | |
| 2288 | + | |
| 2289 | + | |
| 2290 | + | |
| 2291 | + | |
| 2292 | + | |
| 2293 | + | |
| 2294 | + | |
| 2295 | + | |
| 2296 | + | |
| 2297 | + | |
| 2298 | + | |
| 2299 | + | |
| 2300 | + | |
| 2301 | + | |
| 2302 | + | |
| 2303 | + | |
| 2304 | + | |
| 2305 | + | |
| 2306 | + | |
| 2307 | + | |
| 2308 | + | |
| 2309 | + | |
| 2310 | + | |
| 2311 | + | |
| 2312 | + | |
| 2313 | + | |
| 2314 | + | |
| 2315 | + | |
| 2316 | + | |
| 2317 | + | |
| 2318 | + | |
| 2319 | + | |
| 2320 | + | |
| 2321 | + | |
| 2322 | + | |
| 2323 | + | |
| 2324 | + | |
| 2325 | + | |
| 2326 | + | |
| 2327 | + | |
| 2328 | + | |
| 2329 | + | |
| 2330 | + | |
| 2331 | + | |
| 2332 | + | |
| 2333 | + | |
| 2334 | + | |
| 2335 | + | |
| 2336 | + | |
| 2337 | + | |
| 2338 | + | |
| 2339 | + | |
| 2340 | + | |
| 2341 | + | |
| 2342 | + | |
| 2343 | + | |
| 2344 | + | |
| 2345 | + | |
| 2346 | + | |
| 2347 | + | |
| 2348 | + | |
| 2349 | + | |
| 2350 | + | |
| 2351 | + | |
| 2352 | + | |
| 2353 | + | |
| 2354 | + | |
| 2355 | + | |
| 2356 | + | |
| 2357 | + | |
| 2358 | + | |
| 2359 | + | |
| 2360 | + | |
| 2361 | + | |
| 2362 | + | |
| 2363 | + | |
| 2364 | + | |
| 2365 | + | |
| 2366 | + | |
| 2367 | + | |
| 2368 | + | |
| 2369 | + | |
| 2370 | + | |
| 2371 | + | |
| 2372 | + | |
| 2373 | + | |
| 2374 | + | |
| 2375 | + | |
| 2376 | + | |
2272 | 2377 | | |
2273 | 2378 | | |
2274 | 2379 | | |
| |||
0 commit comments