From 9e505d552f59363e5f70deb2e7adfb52de83eaa0 Mon Sep 17 00:00:00 2001 From: David Aguilar Date: Sun, 17 Mar 2024 02:56:21 -0700 Subject: [PATCH] Eliminate panics and enable the missing panics docs check --- parser/CHANGELOG.md | 2 ++ parser/src/lib.rs | 6 +----- parser/src/parser.rs | 11 +++++++++-- parser/src/scanner.rs | 7 ++++++- 4 files changed, 18 insertions(+), 8 deletions(-) diff --git a/parser/CHANGELOG.md b/parser/CHANGELOG.md index 0c0e4f7..f45c78d 100644 --- a/parser/CHANGELOG.md +++ b/parser/CHANGELOG.md @@ -16,6 +16,8 @@ - `Yaml::load_from_bytes()` is now available. ([#156](https://github.com/chyh1990/yaml-rust/pull/156)) +- The parser and scanner now return Err() instead of calling panic. + **Development**: - The documentation was updated to include a security note mentioning that diff --git a/parser/src/lib.rs b/parser/src/lib.rs index c0ef93b..4ba632e 100644 --- a/parser/src/lib.rs +++ b/parser/src/lib.rs @@ -33,11 +33,7 @@ #![cfg_attr(feature = "cargo-clippy", warn(clippy::pedantic))] #![cfg_attr( feature = "cargo-clippy", - allow( - clippy::should_implement_trait, - clippy::missing_errors_doc, - clippy::missing_panics_doc, - ) + allow(clippy::should_implement_trait, clippy::missing_errors_doc,) )] extern crate hashlink; diff --git a/parser/src/parser.rs b/parser/src/parser.rs index 5f65785..f6c2eb5 100644 --- a/parser/src/parser.rs +++ b/parser/src/parser.rs @@ -306,7 +306,9 @@ impl> Parser { ) -> Result<(), ScanError> { if !self.scanner.stream_started() { let (ev, mark) = self.next()?; - assert_eq!(ev, Event::StreamStart); + if ev != Event::StreamStart { + return Err(ScanError::new(mark, "did not find expected ")); + } recv.on_event(ev, mark); } @@ -337,7 +339,12 @@ impl> Parser { mark: Marker, recv: &mut R, ) -> Result<(), ScanError> { - assert_eq!(first_ev, Event::DocumentStart); + if first_ev != Event::DocumentStart { + return Err(ScanError::new( + mark, + "did not find expected ", + )); + } recv.on_event(first_ev, mark); let (ev, mark) = self.next()?; diff --git a/parser/src/scanner.rs b/parser/src/scanner.rs index cd96ad4..611d9c0 100644 --- a/parser/src/scanner.rs +++ b/parser/src/scanner.rs @@ -716,7 +716,12 @@ impl> Scanner { if !self.token_available { self.fetch_more_tokens()?; } - let t = self.tokens.pop_front().unwrap(); + let Some(t) = self.tokens.pop_front() else { + return Err(ScanError::new( + self.mark, + "did not find expected next token", + )); + }; self.token_available = false; self.tokens_parsed += 1;