diff --git a/parser/src/scanner.rs b/parser/src/scanner.rs index d25ecb8..619e2d9 100644 --- a/parser/src/scanner.rs +++ b/parser/src/scanner.rs @@ -1294,12 +1294,12 @@ impl> Scanner { } self.lookahead(2); } + self.lookahead(1); match self.ch() { '\'' if single => { break; }, '"' if !single => { break; }, _ => {} } - self.lookahead(1); // Consume blank characters. while is_blank(self.ch()) || is_break(self.ch()) { diff --git a/parser/src/yaml.rs b/parser/src/yaml.rs index b8d8163..d67d6a2 100644 --- a/parser/src/yaml.rs +++ b/parser/src/yaml.rs @@ -525,6 +525,13 @@ a1: &DEFAULT assert!(YamlLoader::load_from_str(&s).is_err()); } + #[test] + fn test_issue_65() { + // See: https://github.com/chyh1990/yaml-rust/issues/65 + let b = "\n\"ll\\\"ll\\\r\n\"ll\\\"ll\\\r\r\r\rU\r\r\rU"; + assert!(YamlLoader::load_from_str(&b).is_err()); + } + #[test] fn test_bad_docstart() { assert!(YamlLoader::load_from_str("---This used to cause an infinite loop").is_ok());