Background
Current fuzz targets (fuzz_parse_eager, fuzz_parse_lazy) generate arbitrary JSON, but number parsing edge cases are underrepresented due to random generation bias.
JSON Test Suite includes specific number edge cases (i_number_huge_exp.json, i_number_real_overflow.json), but systematic fuzzing of number boundaries is missing.
Goal
Add a dedicated fuzz target that generates numbers at parsing boundaries to stress-test the number decoder.
Scope
Number Patterns to Generate
- Exponent boundaries:
1e308, 1e-308, 1e309 (overflow), 1e-324 (underflow)
- Integer boundaries:
9223372036854775807 (i64::MAX), 9223372036854775808 (overflow)
- Leading zeros:
00, 01, -00, 0.0, 00.0
- Decimal precision: 17+ digit mantissas
- Sign variations:
-0, +1 (invalid), --1 (invalid)
- Whitespace adjacency: numbers preceded/followed by various whitespace
Validation
- EAGER mode must reject RFC 8259 violations (leading zeros,
+ prefix)
- Valid numbers must round-trip through
get_f64 / get_i64 correctly
- Overflow detection must be consistent between modes
Acceptance Criteria
Technical Notes
- Use
arbitrary crate to generate structured number components (sign, integer, fraction, exponent)
- Consider property:
parse(format!("[{}]", n)).get_f64("[0]") round-trips for valid numbers
References
- RFC 8259 §6 number grammar
- JSON Test Suite number cases:
tests/vendor/JSONTestSuite/test_parsing/i_number_*
Background
Current fuzz targets (
fuzz_parse_eager,fuzz_parse_lazy) generate arbitrary JSON, but number parsing edge cases are underrepresented due to random generation bias.JSON Test Suite includes specific number edge cases (
i_number_huge_exp.json,i_number_real_overflow.json), but systematic fuzzing of number boundaries is missing.Goal
Add a dedicated fuzz target that generates numbers at parsing boundaries to stress-test the number decoder.
Scope
Number Patterns to Generate
1e308,1e-308,1e309(overflow),1e-324(underflow)9223372036854775807(i64::MAX),9223372036854775808(overflow)00,01,-00,0.0,00.0-0,+1(invalid),--1(invalid)Validation
+prefix)get_f64/get_i64correctlyAcceptance Criteria
fuzz_numbersinfuzz/fuzz_targets/i_number_*casesfuzz.ymltimed fuzzing scheduleTechnical Notes
arbitrarycrate to generate structured number components (sign, integer, fraction, exponent)parse(format!("[{}]", n)).get_f64("[0]")round-trips for valid numbersReferences
tests/vendor/JSONTestSuite/test_parsing/i_number_*