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>
This commit is contained in:
Emilio Cobos Álvarez 2017-05-15 16:38:35 +02:00
parent 1e0edf4909
commit fe8da51fee
No known key found for this signature in database
GPG key ID: 056B727BB9C1027C

View file

@ -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,