From 708673a5583fbe0a20c12395bf293508da9997f4 Mon Sep 17 00:00:00 2001 From: Tom Tromey Date: Tue, 22 Aug 2017 11:50:53 -0600 Subject: [PATCH] Fix an off-by-one error in CDC skipping skip_cdc_and_cdo had an off-by-one error when trying to skip the CDC. --- src/tests.rs | 9 +++++++++ src/tokenizer.rs | 2 +- 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/src/tests.rs b/src/tests.rs index 36363453..3a0439e7 100644 --- a/src/tests.rs +++ b/src/tests.rs @@ -970,6 +970,15 @@ fn parser_maintains_current_line() { assert_eq!(parser.current_line(), "ident"); } +#[test] +fn cdc_regression_test() { + let mut input = ParserInput::new("-->x"); + let mut parser = Parser::new(&mut input); + parser.skip_cdc_and_cdo(); + assert_eq!(parser.next(), Ok(&Token::Ident("x".into()))); + assert_eq!(parser.next(), Err(BasicParseError::EndOfInput)); +} + #[test] fn parse_entirely_reports_first_error() { #[derive(PartialEq, Debug)] diff --git a/src/tokenizer.rs b/src/tokenizer.rs index f7c13f43..51f37b9a 100644 --- a/src/tokenizer.rs +++ b/src/tokenizer.rs @@ -470,7 +470,7 @@ impl<'a> Tokenizer<'a> { } b'-' => { if self.starts_with(b"-->") { - self.advance(4) + self.advance(3) } else { return }