diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 727d4bb3..a8f0dd89 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -93,7 +93,12 @@ jobs: uses: actions-rs/cargo@v1 with: command: test - args: --all --verbose + args: --all --verbose --release + - name: Cargo test (run ignored) + uses: actions-rs/cargo@v1 + with: + command: test + args: -p pest_grammars --lib --verbose --release -- --ignored tests::toml_handles_deep_nesting_unstable coverage: name: Test Coverage diff --git a/grammars/fuzz/fuzz_targets/toml.rs b/grammars/fuzz/fuzz_targets/toml.rs index 9e2389ac..9a4903b8 100644 --- a/grammars/fuzz/fuzz_targets/toml.rs +++ b/grammars/fuzz/fuzz_targets/toml.rs @@ -11,7 +11,7 @@ fuzz_target!(|data: &[u8]| { use pest_grammars::Parser; if let Ok(s) = std::str::from_utf8(data) { - pest::set_call_limit(Some(100_000usize.try_into().unwrap())); + pest::set_call_limit(Some(5_000usize.try_into().unwrap())); let _ = toml::TomlParser::parse(toml::Rule::toml, s); } }); diff --git a/grammars/resources/test/tomlfuzzsample2.toml b/grammars/resources/test/tomlfuzzsample2.toml new file mode 100644 index 00000000..05b697c4 --- /dev/null +++ b/grammars/resources/test/tomlfuzzsample2.toml @@ -0,0 +1,5 @@ +[1]O=[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[{x=1,O=[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[{x=1,O=8,x=6,O=5,z=8,Ox4=[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[{x=0,O=8,x=6,O=5,z=8,Ox3=[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[{x=1,O=[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[{x=1,O=[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[{x=1,O=8,x=6,O=0,z=8,Ox3=[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[{x=0,O=8,x=6,O=5,z=8,Ox3=[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[{x=1,O=[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[{x=0,O=8,x=6,O=5,z=8,Ox3r=[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[{x=1,O=8,x=5,O=5,z=8,Ox3=[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[{x=4294967297,O=8,x=6,O=5,z=8,Ox3r=[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[{x=1,O=8,x=5,O=5,z=8,Ox3=[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[{x=1,O=[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[{x=1,O=8,x=6,O=5,z=8,Ox4=[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[{x=0,O=8,x=6,O=5,z=8,Ox3=[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[{x=1,O=[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[{x=1,O=[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[{x=1,O=8,x=6,O=0,z=8,Ox3=[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[{x=0,O=8,x=6,O=5,z=8,Ox3=[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[{x=1,O=[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[{x=0,O=8,x=6,O=5,z=8,Ox3r=[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[{x=1,O=8,x=5,O=5,z=8,Ox3=[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[{x=1,O=8,x=6,O=0,z=8,Ox3=[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[{x=0,O=8,x=6,O=5,z=8,Ox3=[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[{x=1,O=[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[{x=0,O=8,x=6,O=5,z=8,Ox3r=[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[{x=1,O=8,x=5,O=5,z=8,Ox3=[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[{x=4294967297,O=8,x=6,O=5,z=8,Ox3r=[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[{x=1,O=8,x=5,O=5,z=8,Ox3=[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[{x=1,O=[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[{x=1,O=8,x=6,O=5,z=8,Ox4=[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[{x=0,O=8,x=6,O=5,z=8,Ox3=[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[{x=1,O=[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[{x=1,O=[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[{x=1,O=8,x=6,O=0,z=8,Ox3=[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[{x=0,O=8,x=6,O=5,z=8,Ox3=[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[{x=1,O=[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[{x=0,O=8,x=6,O=5,z=8,Ox3r=[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[{x=1,O=8,x=5,O=5,z=8,Ox3=[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[{x=4294967297,O=8,x=6,O=5,z=8,Ox3r=[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[{x=1,O=8,x=5,O=5,z=8,Ox3=[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[{x=1,O=[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[{x=1,O=8,x=6,O=5,z=8,Ox4=[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[{x=0,O=8,x=6,O=5,z=8,Ox3=[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[{x=1,O=[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[{x=1,O=[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[{x=1,O=8,x=6,O=0,z=8,Ox3=[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[{x=0,O=8,x=6,O=5,z=8,Ox3=[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[{x=1,O=[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[{x=0,O=8,x=6,O=5,z=8,Ox3r=[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[{x=1,O=8,x=5,O=5,z=8,Ox3=[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[{x=4294967297,O=8,x=6,O=5,z=8,Ox3r=[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[{x=1,O=8,x=5,O=5,z=8,Ox3=[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[{x=1,O=[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[{x=1,O=8,x=6,O=5,z=8,Ox4=[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[{x=0,O=8,x=6,O=5,z=8,Ox3=[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[{x=1,O=[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[{x=1,O=[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[{x=1,O=8,x=6,O=0,z=8,Ox3=[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[{x=0,O=8,x=6,O=5,z=8,Ox3=[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[{x=1,O=[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[{x=0,O=8,x=6,O=5,z=8,Ox3r=[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[{x=1,O=8,x=5,O=5,z=8,Ox3=[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[{x=4294967297,O=8,x=6,O=5,z=8,Ox3r=[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[7297,O=8,x=6,O=5,z=8,Ox3r=[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[O=8,x=5,O=5,z=8,Ox3=[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[{x=1,O=8,x=5,O=5,z=8,Ox3=[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[1,5, + +[1,5 +,5 +,170141183460469231731687303715916988704O=8 \ No newline at end of file diff --git a/grammars/src/lib.rs b/grammars/src/lib.rs index 83b642e6..6c6285ad 100644 --- a/grammars/src/lib.rs +++ b/grammars/src/lib.rs @@ -41,17 +41,31 @@ mod tests { use crate::{json, toml}; + fn test_toml_deep_nesting(input: &str) { + const ERROR: &str = "call limit reached"; + pest::set_call_limit(Some(5_000usize.try_into().unwrap())); + let s = toml::TomlParser::parse(toml::Rule::toml, input); + assert!(s.is_err()); + assert_eq!(s.unwrap_err().variant.message(), ERROR); + } + #[test] fn toml_handles_deep_nesting() { let sample1 = include_str!(concat!( env!("CARGO_MANIFEST_DIR"), "/resources/test/tomlfuzzsample1.toml" )); - const ERROR: &str = "call limit reached"; - pest::set_call_limit(Some(100_000usize.try_into().unwrap())); - let s1 = toml::TomlParser::parse(toml::Rule::toml, sample1); - assert!(s1.is_err()); - assert_eq!(s1.unwrap_err().variant.message(), ERROR); + test_toml_deep_nesting(sample1); + } + + #[test] + #[ignore = "this sometimes crashes in the debug mode"] + fn toml_handles_deep_nesting_unstable() { + let sample2 = include_str!(concat!( + env!("CARGO_MANIFEST_DIR"), + "/resources/test/tomlfuzzsample2.toml" + )); + test_toml_deep_nesting(sample2); } #[test]