aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEmilio Cobos Álvarez <emilio@crisal.io>2017-05-15 16:38:35 +0200
committerEmilio Cobos Álvarez <emilio@crisal.io>2017-05-16 02:53:44 +0200
commitfe8da51feeb11102c25700da839eabbcf33bf22c (patch)
tree665901ecf5288f2259c5bb7902891ced2689fe0e
parent1e0edf49090dce7ccdd5c79a0cef566f44ea431b (diff)
downloadservo-fe8da51feeb11102c25700da839eabbcf33bf22c.tar.gz
servo-fe8da51feeb11102c25700da839eabbcf33bf22c.zip
Bug 1364412: Properly reject to parse pseudo-element states that don't support state. r=bholley
MozReview-Commit-ID: KQCFPtOTGQI Signed-off-by: Emilio Cobos Álvarez <emilio@crisal.io>
-rw-r--r--components/style/gecko/selector_parser.rs28
1 files 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,