diff --git a/src/tests.rs b/src/tests.rs index 0c538618..d2fecbed 100644 --- a/src/tests.rs +++ b/src/tests.rs @@ -295,6 +295,17 @@ fn bad_url_slice_not_at_char_boundary() { assert_eq!(result, Ok(&Token::BadUrl("9\n۰".into()))); } +/// https://bugzilla.mozilla.org/show_bug.cgi?id=2089012 +#[test] +fn bad_url_escape_after_whitespace() { + let mut parser = Parser::new("url(foo \\) bar) baz"); + let result = parser.next_including_whitespace_and_comments(); + assert_eq!(result, Ok(&Token::BadUrl("foo \\) bar".into()))); + let mut parser = Parser::new("url(foo \\\\) bar"); + let result = parser.next_including_whitespace_and_comments(); + assert_eq!(result, Ok(&Token::BadUrl("foo \\\\".into()))); +} + #[test] fn unquoted_url_escaping() { let token = Token::UnquotedUrl( diff --git a/src/tokenizer.rs b/src/tokenizer.rs index 64a7798f..07342cf6 100644 --- a/src/tokenizer.rs +++ b/src/tokenizer.rs @@ -1341,10 +1341,8 @@ fn consume_unquoted_url<'a>(parser: &mut Parser<'a>) -> Result, ()> { b'\n' | b'\x0C' | b'\r' => { parser.consume_newline(); } - b => { - parser.consume_known_byte(b); - return consume_bad_url(parser, start_pos); - } + // NOTE: No advance(), to deal correctly with escapes. + b => return consume_bad_url(parser, start_pos), } } UnquotedUrl(string)