From ef25d8b880348bb293c19f97ba59735a0f5f6cc1 Mon Sep 17 00:00:00 2001 From: ConnorSkees <39542938+ConnorSkees@users.noreply.github.com> Date: Thu, 2 Apr 2020 02:14:59 -0400 Subject: [PATCH] handle control characters at start of selector --- src/lib.rs | 3 +++ src/selector.rs | 3 +++ tests/error.rs | 8 ++++++++ 3 files changed, 14 insertions(+) diff --git a/src/lib.rs b/src/lib.rs index 95be267..0bc3b40 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -397,6 +397,9 @@ impl<'a> StyleSheetParser<'a> { "Base-level rules cannot contain the parent-selector-referencing character '&'.".into(), ) } + c if c.is_control() => { + return Err("expected selector.".into()); + } _ => match dbg!(self.lexer.next()) { Some(Token { pos, .. }) => self.error(pos, "unexpected toplevel token"), _ => unsafe { std::hint::unreachable_unchecked() }, diff --git a/src/selector.rs b/src/selector.rs index cf5fc41..a94756d 100644 --- a/src/selector.rs +++ b/src/selector.rs @@ -331,6 +331,9 @@ impl<'a> SelectorParser<'a> { self.super_selector, )?) } + c if c.is_control() => { + return Err("expected selector.".into()); + } _ => todo!("unimplemented selector"), }; } diff --git a/tests/error.rs b/tests/error.rs index 9e74c5a..0d89f8a 100644 --- a/tests/error.rs +++ b/tests/error.rs @@ -44,3 +44,11 @@ error!( symbol_after_hash, "a {color: bar + #}ar;}", "Error: Expected identifier." ); +error!( + control_character_starts_selector_toplevel, + "l {color: foo;}", "Error: expected selector." +); +error!( + control_character_starts_selector_inner, + "a{l {color: foo;}}", "Error: expected selector." +);