Fix towards invalid trailing characters.
This commit is contained in:
parent
032efff867
commit
bff3c4ccaf
2 changed files with 34 additions and 1 deletions
|
@ -679,6 +679,10 @@ impl<T: Iterator<Item = char>> Scanner<T> {
|
|||
&& is_blankz(self.buffer[3])
|
||||
{
|
||||
self.fetch_document_indicator(TokenType::DocumentEnd)?;
|
||||
self.skip_ws_to_eol(SkipTabs::Yes);
|
||||
if !is_breakz(self.ch()) {
|
||||
return Err(ScanError::new(self.mark, "invalid content after document end marker"));
|
||||
}
|
||||
return Ok(());
|
||||
}
|
||||
|
||||
|
@ -1809,6 +1813,25 @@ impl<T: Iterator<Item = char>> Scanner<T> {
|
|||
|
||||
// Eat the right quote.
|
||||
self.skip();
|
||||
// Ensure there is no invalid trailing content.
|
||||
self.skip_ws_to_eol(SkipTabs::Yes);
|
||||
match self.ch() {
|
||||
// These can be encountered in flow sequences or mappings.
|
||||
',' | '}' | ']' if self.flow_level > 0 => {}
|
||||
// An end-of-line / end-of-stream is fine. No trailing content.
|
||||
c if is_breakz(c) => {}
|
||||
// ':' can be encountered if our scalar is a key.
|
||||
// Outside of flow contexts, keys cannot span multiple lines
|
||||
':' if self.flow_level == 0 && start_mark.line == self.mark.line => {}
|
||||
// Inside a flow context, this is allowed.
|
||||
':' if self.flow_level > 0 => {}
|
||||
_ => {
|
||||
return Err(ScanError::new(
|
||||
self.mark,
|
||||
"invalid trailing content after double-quoted scalar",
|
||||
));
|
||||
}
|
||||
}
|
||||
|
||||
let style = if single {
|
||||
TScalarStyle::SingleQuoted
|
||||
|
|
|
@ -52,7 +52,9 @@ scalar
|
|||
key: [1, 2]]
|
||||
key1:a2
|
||||
";
|
||||
let Err(error) = YamlLoader::load_from_str(s) else { panic!() };
|
||||
let Err(error) = YamlLoader::load_from_str(s) else {
|
||||
panic!()
|
||||
};
|
||||
assert_eq!(
|
||||
error.info(),
|
||||
"mapping values are not allowed in this context"
|
||||
|
@ -235,6 +237,14 @@ fn test_issue_65() {
|
|||
assert!(YamlLoader::load_from_str(b).is_err());
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_issue_65_mwe() {
|
||||
// A MWE for `test_issue_65`. The error over there is that there is invalid trailing content
|
||||
// after a double quoted string.
|
||||
let b = r#""foo" l"#;
|
||||
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());
|
||||
|
|
Loading…
Reference in a new issue