Add and fix another fuzz test.

This commit is contained in:
Ethiraric 2024-10-19 19:08:28 +02:00
parent d997b53c8d
commit 6069e1d0e3
2 changed files with 17 additions and 1 deletions

View file

@ -2386,7 +2386,8 @@ impl<T: Input> Scanner<T> {
fn fetch_value(&mut self) -> ScanResult { fn fetch_value(&mut self) -> ScanResult {
let sk = self.simple_keys.last().unwrap().clone(); let sk = self.simple_keys.last().unwrap().clone();
let start_mark = self.mark; let start_mark = self.mark;
let is_implicit_flow_mapping = self.flow_level > 0 && !self.flow_mapping_started; let is_implicit_flow_mapping =
!self.implicit_flow_mapping_states.is_empty() && !self.flow_mapping_started;
if is_implicit_flow_mapping { if is_implicit_flow_mapping {
*self.implicit_flow_mapping_states.last_mut().unwrap() = ImplicitMappingState::Inside; *self.implicit_flow_mapping_states.last_mut().unwrap() = ImplicitMappingState::Inside;
} }

View file

@ -40,3 +40,18 @@ fn fuzz_1() {
let s = str::from_utf8(raw_input).unwrap(); let s = str::from_utf8(raw_input).unwrap();
let _ = run_parser(s); let _ = run_parser(s);
} }
#[test]
fn fuzz_2() {
// Crashing with an unwrap of a None value.
// There is an imbalance of implicit flow mapping contexts here between the opening `[`/`{` and
// closing `]`/`}`. We would test against flow-level when only `[` can create implicit flow
// mappings.
let raw_input: &[u8] = &[
91, 91, 32, 101, 58, 9, 123, 63, 32, 45, 106, 101, 58, 9, 123, 63, 32, 44, 117, 101, 58, 9,
123, 63, 32, 44, 9, 26, 58, 32, 126, 93, 8, 58, 32, 58, 10, 29, 58, 58, 58, 32, 58, 29, 63,
32, 44, 9, 26, 58, 32, 126, 93, 8, 58, 32, 58, 10, 78, 32,
];
let s = str::from_utf8(raw_input).unwrap();
let _ = run_parser(s);
}