Merge pull request #25 from hoodie/bug/infinite_loop

Fix logic error that caused infinite loop
This commit is contained in:
Chen Yuheng 2016-06-23 12:41:59 +08:00 committed by GitHub
commit a99c7b3a9d
2 changed files with 12 additions and 4 deletions

View file

@ -1191,12 +1191,12 @@ impl<T: Iterator<Item=char>> Scanner<T> {
self.lookahead(4);
if self.mark.col == 0 &&
((self.buffer[0] == '-') &&
(((self.buffer[0] == '-') &&
(self.buffer[1] == '-') &&
(self.buffer[2] == '-')) ||
((self.buffer[0] == '.') &&
(self.buffer[1] == '.') &&
(self.buffer[2] == '.')) &&
(self.buffer[2] == '.'))) &&
is_blankz(self.buffer[3]) {
return Err(ScanError::new(start_mark,
"while scanning a quoted scalar, found unexpected document indicator"));
@ -1381,12 +1381,12 @@ impl<T: Iterator<Item=char>> Scanner<T> {
self.lookahead(4);
if self.mark.col == 0 &&
((self.buffer[0] == '-') &&
(((self.buffer[0] == '-') &&
(self.buffer[1] == '-') &&
(self.buffer[2] == '-')) ||
((self.buffer[0] == '.') &&
(self.buffer[1] == '.') &&
(self.buffer[2] == '.')) &&
(self.buffer[2] == '.'))) &&
is_blankz(self.buffer[3]) {
break;
}

View file

@ -476,4 +476,12 @@ a1: &DEFAULT
let s = "{-";
assert!(YamlLoader::load_from_str(&s).is_err());
}
#[test]
fn test_bad_docstart() {
assert!(YamlLoader::load_from_str("---This used to cause an infinite loop").is_ok());
assert_eq!(YamlLoader::load_from_str("----"), Ok(vec![Yaml::String(String::from("----"))]));
assert_eq!(YamlLoader::load_from_str("--- #here goes a comment"), Ok(vec![Yaml::Null]));
assert_eq!(YamlLoader::load_from_str("---- #here goes a comment"), Ok(vec![Yaml::String(String::from("----"))]));
}
}