diff --git a/saphyr/src/parser.rs b/saphyr/src/parser.rs index b0b3188..d8c1009 100644 --- a/saphyr/src/parser.rs +++ b/saphyr/src/parser.rs @@ -498,15 +498,20 @@ impl> Parser { } fn parser_process_directives(&mut self) -> Result<(), ScanError> { + let mut version_directive_received = false; loop { let mut tags = HashMap::new(); match self.peek_token()? { - Token(_, TokenType::VersionDirective(_, _)) => { + Token(mark, TokenType::VersionDirective(_, _)) => { // XXX parsing with warning according to spec //if major != 1 || minor > 2 { // return Err(ScanError::new(tok.0, // "found incompatible YAML document")); //} + if version_directive_received == true { + return Err(ScanError::new(*mark, "duplicate version directive")); + } + version_directive_received = true; } Token(mark, TokenType::TagDirective(handle, prefix)) => { if tags.contains_key(handle) { diff --git a/saphyr/tests/yaml-test-suite.rs b/saphyr/tests/yaml-test-suite.rs index 7c5ace6..1e88b65 100644 --- a/saphyr/tests/yaml-test-suite.rs +++ b/saphyr/tests/yaml-test-suite.rs @@ -298,7 +298,6 @@ fn expected_events(expected_tree: &str) -> Vec { #[rustfmt::skip] static EXPECTED_FAILURES: &[&str] = &[ // Directives (various) - "SF5V", // duplicate directive "W4TN", // scalar confused as directive // Losing trailing newline "JEF9-02",