From fe8da51feeb11102c25700da839eabbcf33bf22c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Emilio=20Cobos=20=C3=81lvarez?= Date: Mon, 15 May 2017 16:38:35 +0200 Subject: [PATCH] Bug 1364412: Properly reject to parse pseudo-element states that don't support state. r=bholley MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit MozReview-Commit-ID: KQCFPtOTGQI Signed-off-by: Emilio Cobos Álvarez --- components/style/gecko/selector_parser.rs | 28 +++++++++++++---------- 1 file changed, 16 insertions(+), 12 deletions(-) diff --git a/components/style/gecko/selector_parser.rs b/components/style/gecko/selector_parser.rs index 9c67c06d60a..64f135c73ae 100644 --- a/components/style/gecko/selector_parser.rs +++ b/components/style/gecko/selector_parser.rs @@ -319,22 +319,26 @@ impl<'a> ::selectors::Parser for SelectorParser<'a> { None => return Err(()), }; - let state = input.try(|input| { - let mut state = ElementState::empty(); + let state = if pseudo.supports_user_action_state() { + input.try(|input| { + let mut state = ElementState::empty(); - while !input.is_exhausted() { - input.expect_colon()?; - let ident = input.expect_ident()?; - let pseudo_class = self.parse_non_ts_pseudo_class(ident)?; + while !input.is_exhausted() { + input.expect_colon()?; + let ident = input.expect_ident()?; + let pseudo_class = self.parse_non_ts_pseudo_class(ident)?; - if !pseudo_class.is_safe_user_action_state() { - return Err(()) + if !pseudo_class.is_safe_user_action_state() { + return Err(()) + } + state.insert(pseudo_class.state_flag()); } - state.insert(pseudo_class.state_flag()); - } - Ok(state) - }); + Ok(state) + }).ok() + } else { + None + }; Ok(PseudoElementSelector { pseudo: pseudo,