Bug 1314531 - Disallow xul tree pseudo-elements with user action pseudo-classes. r?heycam draft
authorXidorn Quan <me@upsuper.org>
Thu, 03 Nov 2016 11:21:19 +1100
changeset 432863 ffde6f6de32610af0320ec5ae42e172500234e5e
parent 432862 f4870da87d31287387c3c24c8a49eb81ed741e6a
child 535780 b3b601e05e34ea624e8ecd26917d3ef1bc953624
push id34454
push userxquan@mozilla.com
push dateThu, 03 Nov 2016 00:21:54 +0000
reviewersheycam
bugs1314531
milestone52.0a1
Bug 1314531 - Disallow xul tree pseudo-elements with user action pseudo-classes. r?heycam MozReview-Commit-ID: 85DDwDl0oYg
layout/style/crashtests/1314531.html
layout/style/crashtests/crashtests.list
layout/style/nsCSSParser.cpp
new file mode 100644
--- /dev/null
+++ b/layout/style/crashtests/1314531.html
@@ -0,0 +1,2 @@
+<!DOCTYPE html>
+<style>::-moz-tree-row:hover {}</style>
--- a/layout/style/crashtests/crashtests.list
+++ b/layout/style/crashtests/crashtests.list
@@ -154,8 +154,9 @@ load 1278463-1.html
 pref(dom.animations-api.core.enabled,true) load 1277908-1.html
 load 1277908-2.html
 load 1282076-1.html
 pref(dom.animations-api.core.enabled,true) load 1282076-2.html
 pref(dom.animations-api.core.enabled,true) load 1290994-1.html
 pref(dom.animations-api.core.enabled,true) load 1290994-2.html
 pref(dom.animations-api.core.enabled,true) load 1290994-3.html
 load 1290994-4.html
+load 1314531.html
--- a/layout/style/nsCSSParser.cpp
+++ b/layout/style/nsCSSParser.cpp
@@ -6092,17 +6092,18 @@ CSSParserImpl::ParsePseudoSelector(int32
       !isAnonBox) {
     REPORT_UNEXPECTED_TOKEN(PEPseudoSelNotPE);
     UngetToken();
     return eSelectorParsingStatus_Error;
   }
 
   if (aSelector.IsPseudoElement()) {
     CSSPseudoElementType type = aSelector.PseudoType();
-    if (!nsCSSPseudoElements::PseudoElementSupportsUserActionState(type)) {
+    if (type >= CSSPseudoElementType::Count ||
+        !nsCSSPseudoElements::PseudoElementSupportsUserActionState(type)) {
       // We only allow user action pseudo-classes on certain pseudo-elements.
       REPORT_UNEXPECTED_TOKEN(PEPseudoSelNoUserActionPC);
       UngetToken();
       return eSelectorParsingStatus_Error;
     }
     if (!isPseudoClass || !pseudoClassIsUserAction) {
       // CSS 4 Selectors says that pseudo-elements can only be followed by
       // a user action pseudo-class.