Fix logic error that caused infinite loop
This commit is contained in:
parent
fc774f2963
commit
ca7956f429
2 changed files with 12 additions and 4 deletions
|
@ -1191,12 +1191,12 @@ impl<T: Iterator<Item=char>> Scanner<T> {
|
||||||
self.lookahead(4);
|
self.lookahead(4);
|
||||||
|
|
||||||
if self.mark.col == 0 &&
|
if self.mark.col == 0 &&
|
||||||
((self.buffer[0] == '-') &&
|
(((self.buffer[0] == '-') &&
|
||||||
(self.buffer[1] == '-') &&
|
(self.buffer[1] == '-') &&
|
||||||
(self.buffer[2] == '-')) ||
|
(self.buffer[2] == '-')) ||
|
||||||
((self.buffer[0] == '.') &&
|
((self.buffer[0] == '.') &&
|
||||||
(self.buffer[1] == '.') &&
|
(self.buffer[1] == '.') &&
|
||||||
(self.buffer[2] == '.')) &&
|
(self.buffer[2] == '.'))) &&
|
||||||
is_blankz(self.buffer[3]) {
|
is_blankz(self.buffer[3]) {
|
||||||
return Err(ScanError::new(start_mark,
|
return Err(ScanError::new(start_mark,
|
||||||
"while scanning a quoted scalar, found unexpected document indicator"));
|
"while scanning a quoted scalar, found unexpected document indicator"));
|
||||||
|
@ -1381,12 +1381,12 @@ impl<T: Iterator<Item=char>> Scanner<T> {
|
||||||
self.lookahead(4);
|
self.lookahead(4);
|
||||||
|
|
||||||
if self.mark.col == 0 &&
|
if self.mark.col == 0 &&
|
||||||
((self.buffer[0] == '-') &&
|
(((self.buffer[0] == '-') &&
|
||||||
(self.buffer[1] == '-') &&
|
(self.buffer[1] == '-') &&
|
||||||
(self.buffer[2] == '-')) ||
|
(self.buffer[2] == '-')) ||
|
||||||
((self.buffer[0] == '.') &&
|
((self.buffer[0] == '.') &&
|
||||||
(self.buffer[1] == '.') &&
|
(self.buffer[1] == '.') &&
|
||||||
(self.buffer[2] == '.')) &&
|
(self.buffer[2] == '.'))) &&
|
||||||
is_blankz(self.buffer[3]) {
|
is_blankz(self.buffer[3]) {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
|
@ -476,4 +476,12 @@ a1: &DEFAULT
|
||||||
let s = "{-";
|
let s = "{-";
|
||||||
assert!(YamlLoader::load_from_str(&s).is_err());
|
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("----"))]));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue