Commit 1ae30da
committed
Fix #1557: eagerly validate separator after non-root number values
Number values inside Arrays/Objects were only checked for a valid
trailing separator at root level (cf. #105 / #679). Non-root values
pushed the trailing character back unchecked, so malformed input such
as `[ 123true ]`, `[ 100k ]` or `[ 1.5x ]` reported a number token and
only failed lazily when accessing the *following* token.
Generalize the existing root-only `_verifyRootSpace` into
`_verifyNumberSeparator`, applied at every number-completion site in the
three blocking parsers (Reader / UTF-8 stream / UTF-8 DataInput). A
non-root number must now be followed by white space, `,`, `]`, `}`, a
comment start (when comments are enabled) or end-of-input; otherwise an
"expected space..." error is reported at the offending character.
The check reuses the trailing character already read to detect the end
of the number and is a constant-time switch, so the hot path cost is
negligible.
Tests: add non-root verification (and comment-adjacent cases) to
`NonStandardNumberParsingTest` across ALL_MODES; remove the now-fixed
`tofix` repros for the blocking parsers.
Async (non-blocking) parser is intentionally left as a follow-up; its
`tofix` repro remains under `@JacksonTestFailureExpected`.1 parent c7d5423 commit 1ae30da
10 files changed
Lines changed: 230 additions & 324 deletions
File tree
- release-notes
- src
- main/java/tools/jackson/core/json
- test/java
- tools/jackson/core/unittest
- read
- tofix
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
28 | 28 | | |
29 | 29 | | |
30 | 30 | | |
| 31 | + | |
| 32 | + | |
31 | 33 | | |
32 | 34 | | |
33 | 35 | | |
| |||
Lines changed: 55 additions & 17 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1413 | 1413 | | |
1414 | 1414 | | |
1415 | 1415 | | |
1416 | | - | |
1417 | | - | |
1418 | | - | |
1419 | | - | |
| 1416 | + | |
| 1417 | + | |
1420 | 1418 | | |
1421 | 1419 | | |
1422 | 1420 | | |
| |||
1480 | 1478 | | |
1481 | 1479 | | |
1482 | 1480 | | |
1483 | | - | |
1484 | | - | |
1485 | | - | |
1486 | | - | |
| 1481 | + | |
| 1482 | + | |
1487 | 1483 | | |
1488 | 1484 | | |
1489 | 1485 | | |
| |||
1538 | 1534 | | |
1539 | 1535 | | |
1540 | 1536 | | |
1541 | | - | |
1542 | | - | |
1543 | | - | |
| 1537 | + | |
1544 | 1538 | | |
1545 | 1539 | | |
1546 | 1540 | | |
| |||
1704 | 1698 | | |
1705 | 1699 | | |
1706 | 1700 | | |
1707 | | - | |
1708 | | - | |
1709 | | - | |
| 1701 | + | |
1710 | 1702 | | |
1711 | 1703 | | |
1712 | 1704 | | |
| |||
1773 | 1765 | | |
1774 | 1766 | | |
1775 | 1767 | | |
1776 | | - | |
1777 | | - | |
1778 | | - | |
| 1768 | + | |
1779 | 1769 | | |
1780 | 1770 | | |
1781 | 1771 | | |
| |||
1907 | 1897 | | |
1908 | 1898 | | |
1909 | 1899 | | |
| 1900 | + | |
| 1901 | + | |
| 1902 | + | |
| 1903 | + | |
| 1904 | + | |
| 1905 | + | |
| 1906 | + | |
| 1907 | + | |
| 1908 | + | |
| 1909 | + | |
| 1910 | + | |
| 1911 | + | |
| 1912 | + | |
| 1913 | + | |
| 1914 | + | |
| 1915 | + | |
| 1916 | + | |
| 1917 | + | |
| 1918 | + | |
| 1919 | + | |
| 1920 | + | |
| 1921 | + | |
| 1922 | + | |
| 1923 | + | |
| 1924 | + | |
| 1925 | + | |
| 1926 | + | |
| 1927 | + | |
| 1928 | + | |
| 1929 | + | |
| 1930 | + | |
| 1931 | + | |
| 1932 | + | |
| 1933 | + | |
| 1934 | + | |
| 1935 | + | |
| 1936 | + | |
| 1937 | + | |
| 1938 | + | |
| 1939 | + | |
| 1940 | + | |
| 1941 | + | |
| 1942 | + | |
| 1943 | + | |
| 1944 | + | |
| 1945 | + | |
| 1946 | + | |
| 1947 | + | |
1910 | 1948 | | |
1911 | 1949 | | |
1912 | 1950 | | |
| |||
Lines changed: 54 additions & 15 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1092 | 1092 | | |
1093 | 1093 | | |
1094 | 1094 | | |
1095 | | - | |
| 1095 | + | |
1096 | 1096 | | |
1097 | | - | |
1098 | | - | |
1099 | | - | |
| 1097 | + | |
1100 | 1098 | | |
1101 | 1099 | | |
1102 | 1100 | | |
| |||
1160 | 1158 | | |
1161 | 1159 | | |
1162 | 1160 | | |
1163 | | - | |
| 1161 | + | |
1164 | 1162 | | |
1165 | | - | |
1166 | | - | |
1167 | | - | |
| 1163 | + | |
1168 | 1164 | | |
1169 | 1165 | | |
1170 | 1166 | | |
| |||
1209 | 1205 | | |
1210 | 1206 | | |
1211 | 1207 | | |
1212 | | - | |
1213 | | - | |
1214 | | - | |
| 1208 | + | |
1215 | 1209 | | |
1216 | 1210 | | |
1217 | 1211 | | |
| |||
1313 | 1307 | | |
1314 | 1308 | | |
1315 | 1309 | | |
1316 | | - | |
| 1310 | + | |
1317 | 1311 | | |
1318 | | - | |
1319 | | - | |
1320 | | - | |
| 1312 | + | |
1321 | 1313 | | |
1322 | 1314 | | |
1323 | 1315 | | |
| |||
1345 | 1337 | | |
1346 | 1338 | | |
1347 | 1339 | | |
| 1340 | + | |
| 1341 | + | |
| 1342 | + | |
| 1343 | + | |
| 1344 | + | |
| 1345 | + | |
| 1346 | + | |
| 1347 | + | |
| 1348 | + | |
| 1349 | + | |
| 1350 | + | |
| 1351 | + | |
| 1352 | + | |
| 1353 | + | |
| 1354 | + | |
| 1355 | + | |
| 1356 | + | |
| 1357 | + | |
| 1358 | + | |
| 1359 | + | |
| 1360 | + | |
| 1361 | + | |
| 1362 | + | |
| 1363 | + | |
| 1364 | + | |
| 1365 | + | |
| 1366 | + | |
| 1367 | + | |
| 1368 | + | |
| 1369 | + | |
| 1370 | + | |
| 1371 | + | |
| 1372 | + | |
| 1373 | + | |
| 1374 | + | |
| 1375 | + | |
| 1376 | + | |
| 1377 | + | |
| 1378 | + | |
| 1379 | + | |
| 1380 | + | |
| 1381 | + | |
| 1382 | + | |
| 1383 | + | |
| 1384 | + | |
| 1385 | + | |
| 1386 | + | |
1348 | 1387 | | |
1349 | 1388 | | |
1350 | 1389 | | |
| |||
Lines changed: 57 additions & 19 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1856 | 1856 | | |
1857 | 1857 | | |
1858 | 1858 | | |
1859 | | - | |
1860 | | - | |
1861 | | - | |
1862 | | - | |
| 1859 | + | |
| 1860 | + | |
1863 | 1861 | | |
1864 | 1862 | | |
1865 | 1863 | | |
| |||
1925 | 1923 | | |
1926 | 1924 | | |
1927 | 1925 | | |
1928 | | - | |
1929 | | - | |
1930 | | - | |
1931 | | - | |
| 1926 | + | |
| 1927 | + | |
1932 | 1928 | | |
1933 | 1929 | | |
1934 | 1930 | | |
| |||
1961 | 1957 | | |
1962 | 1958 | | |
1963 | 1959 | | |
1964 | | - | |
1965 | | - | |
1966 | | - | |
1967 | | - | |
| 1960 | + | |
| 1961 | + | |
1968 | 1962 | | |
1969 | 1963 | | |
1970 | 1964 | | |
| |||
2025 | 2019 | | |
2026 | 2020 | | |
2027 | 2021 | | |
2028 | | - | |
2029 | | - | |
2030 | | - | |
| 2022 | + | |
2031 | 2023 | | |
2032 | 2024 | | |
2033 | 2025 | | |
| |||
2157 | 2149 | | |
2158 | 2150 | | |
2159 | 2151 | | |
2160 | | - | |
2161 | | - | |
2162 | | - | |
2163 | | - | |
| 2152 | + | |
| 2153 | + | |
2164 | 2154 | | |
2165 | 2155 | | |
2166 | 2156 | | |
| |||
2203 | 2193 | | |
2204 | 2194 | | |
2205 | 2195 | | |
| 2196 | + | |
| 2197 | + | |
| 2198 | + | |
| 2199 | + | |
| 2200 | + | |
| 2201 | + | |
| 2202 | + | |
| 2203 | + | |
| 2204 | + | |
| 2205 | + | |
| 2206 | + | |
| 2207 | + | |
| 2208 | + | |
| 2209 | + | |
| 2210 | + | |
| 2211 | + | |
| 2212 | + | |
| 2213 | + | |
| 2214 | + | |
| 2215 | + | |
| 2216 | + | |
| 2217 | + | |
| 2218 | + | |
| 2219 | + | |
| 2220 | + | |
| 2221 | + | |
| 2222 | + | |
| 2223 | + | |
| 2224 | + | |
| 2225 | + | |
| 2226 | + | |
| 2227 | + | |
| 2228 | + | |
| 2229 | + | |
| 2230 | + | |
| 2231 | + | |
| 2232 | + | |
| 2233 | + | |
| 2234 | + | |
| 2235 | + | |
| 2236 | + | |
| 2237 | + | |
| 2238 | + | |
| 2239 | + | |
| 2240 | + | |
| 2241 | + | |
| 2242 | + | |
| 2243 | + | |
2206 | 2244 | | |
2207 | 2245 | | |
2208 | 2246 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
34 | 34 | | |
35 | 35 | | |
36 | 36 | | |
37 | | - | |
38 | 37 | | |
39 | 38 | | |
40 | 39 | | |
| |||
0 commit comments