LibWeb: Require CSS combinators to be followed by a simple selector

This commit is contained in:
Gingeh 2024-11-21 16:58:18 +11:00 committed by Andreas Kling
parent bb5678a175
commit a2cf1d17fd
Notes: github-actions[bot] 2024-11-23 08:51:39 +00:00
2 changed files with 27 additions and 23 deletions

View file

@ -166,8 +166,12 @@ Parser::ParseErrorOr<Optional<Selector::CompoundSelector>> 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<Selector::CompoundSelector> {};
}
return Selector::CompoundSelector { combinator, move(simple_selectors) };
}

View file

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