diff --git a/Libraries/LibWeb/CSS/Parser/SelectorParsing.cpp b/Libraries/LibWeb/CSS/Parser/SelectorParsing.cpp index 724292cb64c..8ac9ae304ed 100644 --- a/Libraries/LibWeb/CSS/Parser/SelectorParsing.cpp +++ b/Libraries/LibWeb/CSS/Parser/SelectorParsing.cpp @@ -166,8 +166,12 @@ Parser::ParseErrorOr> Parser::parse_compoun simple_selectors.append(component.release_value()); } - if (simple_selectors.is_empty()) + if (simple_selectors.is_empty()) { + if (tokens.has_next_token() || combinator != Selector::Combinator::Descendant) + return ParseError::SyntaxError; + return Optional {}; + } return Selector::CompoundSelector { combinator, move(simple_selectors) }; } diff --git a/Tests/LibWeb/Text/expected/wpt-import/dom/nodes/ParentNode-querySelector-All.txt b/Tests/LibWeb/Text/expected/wpt-import/dom/nodes/ParentNode-querySelector-All.txt index b0d3625ff6a..9e626d0def9 100644 --- a/Tests/LibWeb/Text/expected/wpt-import/dom/nodes/ParentNode-querySelector-All.txt +++ b/Tests/LibWeb/Text/expected/wpt-import/dom/nodes/ParentNode-querySelector-All.txt @@ -6,8 +6,8 @@ Rerun Found 1975 tests -1903 Pass -72 Fail +1923 Pass +52 Fail Details Result Test Name MessagePass Selectors-API Test Suite: HTML Pass Document supports querySelector @@ -92,10 +92,10 @@ Pass Document.querySelector: Invalid class: .bar. Pass Document.querySelectorAll: Invalid class: .bar. Pass Document.querySelector: Invalid combinator: div % address, p Pass Document.querySelectorAll: Invalid combinator: div % address, p -Fail Document.querySelector: Invalid combinator: div ++ address, p -Fail Document.querySelectorAll: Invalid combinator: div ++ address, p -Fail Document.querySelector: Invalid combinator: div ~~ address, p -Fail Document.querySelectorAll: Invalid combinator: div ~~ address, p +Pass Document.querySelector: Invalid combinator: div ++ address, p +Pass Document.querySelectorAll: Invalid combinator: div ++ address, p +Pass Document.querySelector: Invalid combinator: div ~~ address, p +Pass Document.querySelectorAll: Invalid combinator: div ~~ address, p Pass Document.querySelector: Invalid [att=value] selector: [*=test] Pass Document.querySelectorAll: Invalid [att=value] selector: [*=test] Pass Document.querySelector: Invalid [att=value] selector: [*|*=test] @@ -160,10 +160,10 @@ Pass Detached Element.querySelector: Invalid class: .bar. Pass Detached Element.querySelectorAll: Invalid class: .bar. Pass Detached Element.querySelector: Invalid combinator: div % address, p Pass Detached Element.querySelectorAll: Invalid combinator: div % address, p -Fail Detached Element.querySelector: Invalid combinator: div ++ address, p -Fail Detached Element.querySelectorAll: Invalid combinator: div ++ address, p -Fail Detached Element.querySelector: Invalid combinator: div ~~ address, p -Fail Detached Element.querySelectorAll: Invalid combinator: div ~~ address, p +Pass Detached Element.querySelector: Invalid combinator: div ++ address, p +Pass Detached Element.querySelectorAll: Invalid combinator: div ++ address, p +Pass Detached Element.querySelector: Invalid combinator: div ~~ address, p +Pass Detached Element.querySelectorAll: Invalid combinator: div ~~ address, p Pass Detached Element.querySelector: Invalid [att=value] selector: [*=test] Pass Detached Element.querySelectorAll: Invalid [att=value] selector: [*=test] Pass Detached Element.querySelector: Invalid [att=value] selector: [*|*=test] @@ -228,10 +228,10 @@ Pass Fragment.querySelector: Invalid class: .bar. Pass Fragment.querySelectorAll: Invalid class: .bar. Pass Fragment.querySelector: Invalid combinator: div % address, p Pass Fragment.querySelectorAll: Invalid combinator: div % address, p -Fail Fragment.querySelector: Invalid combinator: div ++ address, p -Fail Fragment.querySelectorAll: Invalid combinator: div ++ address, p -Fail Fragment.querySelector: Invalid combinator: div ~~ address, p -Fail Fragment.querySelectorAll: Invalid combinator: div ~~ address, p +Pass Fragment.querySelector: Invalid combinator: div ++ address, p +Pass Fragment.querySelectorAll: Invalid combinator: div ++ address, p +Pass Fragment.querySelector: Invalid combinator: div ~~ address, p +Pass Fragment.querySelectorAll: Invalid combinator: div ~~ address, p Pass Fragment.querySelector: Invalid [att=value] selector: [*=test] Pass Fragment.querySelectorAll: Invalid [att=value] selector: [*=test] Pass Fragment.querySelector: Invalid [att=value] selector: [*|*=test] @@ -296,10 +296,10 @@ Pass In-document Element.querySelector: Invalid class: .bar. Pass In-document Element.querySelectorAll: Invalid class: .bar. Pass In-document Element.querySelector: Invalid combinator: div % address, p Pass In-document Element.querySelectorAll: Invalid combinator: div % address, p -Fail In-document Element.querySelector: Invalid combinator: div ++ address, p -Fail In-document Element.querySelectorAll: Invalid combinator: div ++ address, p -Fail In-document Element.querySelector: Invalid combinator: div ~~ address, p -Fail In-document Element.querySelectorAll: Invalid combinator: div ~~ address, p +Pass In-document Element.querySelector: Invalid combinator: div ++ address, p +Pass In-document Element.querySelectorAll: Invalid combinator: div ++ address, p +Pass In-document Element.querySelector: Invalid combinator: div ~~ address, p +Pass In-document Element.querySelectorAll: Invalid combinator: div ~~ address, p Pass In-document Element.querySelector: Invalid [att=value] selector: [*=test] Pass In-document Element.querySelectorAll: Invalid [att=value] selector: [*=test] Pass In-document Element.querySelector: Invalid [att=value] selector: [*|*=test] @@ -364,10 +364,10 @@ Pass Empty Element.querySelector: Invalid class: .bar. Pass Empty Element.querySelectorAll: Invalid class: .bar. Pass Empty Element.querySelector: Invalid combinator: div % address, p Pass Empty Element.querySelectorAll: Invalid combinator: div % address, p -Fail Empty Element.querySelector: Invalid combinator: div ++ address, p -Fail Empty Element.querySelectorAll: Invalid combinator: div ++ address, p -Fail Empty Element.querySelector: Invalid combinator: div ~~ address, p -Fail Empty Element.querySelectorAll: Invalid combinator: div ~~ address, p +Pass Empty Element.querySelector: Invalid combinator: div ++ address, p +Pass Empty Element.querySelectorAll: Invalid combinator: div ++ address, p +Pass Empty Element.querySelector: Invalid combinator: div ~~ address, p +Pass Empty Element.querySelectorAll: Invalid combinator: div ~~ address, p Pass Empty Element.querySelector: Invalid [att=value] selector: [*=test] Pass Empty Element.querySelectorAll: Invalid [att=value] selector: [*=test] Pass Empty Element.querySelector: Invalid [att=value] selector: [*|*=test]