mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2025-07-28 19:59:17 +00:00
LibWeb: Disallow trailing tokens in @supports(<declaration>)
This commit is contained in:
parent
22bda8e5e2
commit
d7036daa89
Notes:
github-actions[bot]
2025-06-21 10:50:48 +00:00
Author: https://github.com/Calme1709
Commit: d7036daa89
Pull-request: https://github.com/LadybirdBrowser/ladybird/pull/5157
Reviewed-by: https://github.com/tcl3 ✅
5 changed files with 113 additions and 1 deletions
|
@ -291,7 +291,7 @@ OwnPtr<BooleanExpression> Parser::parse_supports_feature(TokenStream<ComponentVa
|
|||
if (first_token.is_block() && first_token.block().is_paren()) {
|
||||
TokenStream block_tokens { first_token.block().value };
|
||||
// FIXME: Parsing and then converting back to a string is weird.
|
||||
if (auto declaration = consume_a_declaration(block_tokens); declaration.has_value()) {
|
||||
if (auto declaration = consume_a_declaration(block_tokens); declaration.has_value() && !block_tokens.has_next_token()) {
|
||||
transaction.commit();
|
||||
auto supports_declaration = Supports::Declaration::create(
|
||||
declaration->to_string(),
|
||||
|
|
|
@ -0,0 +1,14 @@
|
|||
<!DOCTYPE html>
|
||||
<html>
|
||||
<style>
|
||||
div {
|
||||
width: 100px;
|
||||
height: 100px;
|
||||
background-color: green;
|
||||
}
|
||||
</style>
|
||||
<p>
|
||||
Test passes if there is a <strong>filled green square</strong> and <strong>no red</strong>.
|
||||
</p>
|
||||
<div></div>
|
||||
</html>
|
|
@ -0,0 +1,14 @@
|
|||
<!DOCTYPE html>
|
||||
<html>
|
||||
<style>
|
||||
div {
|
||||
width: 100px;
|
||||
height: 100px;
|
||||
background-color: green;
|
||||
}
|
||||
</style>
|
||||
<p>
|
||||
Test passes if there is a <strong>filled green square</strong> and <strong>no red</strong>.
|
||||
</p>
|
||||
<div></div>
|
||||
</html>
|
|
@ -0,0 +1,42 @@
|
|||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title>CSS Test (Conditional Rules): a supports condition declaration can not end with a semi-colon</title>
|
||||
<link rel="author" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/">
|
||||
<link rel="help" href="http://www.w3.org/TR/css3-conditional/#at-supports" title="6. Feature queries: the '@supports' rule">
|
||||
<link rel="match" href="../../../../expected/wpt-import/css/css-conditional/at-supports-001-ref.html">
|
||||
<meta name="flags" content="invalid">
|
||||
<meta name="assert" content="Each individual single supports condition declaration can not end up with a semi-colon ';'. A semi-colon is a punctuation separator of multiple CSS declarations and thus is not part of an individual CSS declaration per se.">
|
||||
|
||||
<!--
|
||||
|
||||
supports_condition_in_parens
|
||||
: ( '(' S* supports_condition ')' S* ) | supports_declaration_condition |
|
||||
general_enclosed
|
||||
;
|
||||
|
||||
-->
|
||||
|
||||
<style>
|
||||
div
|
||||
{
|
||||
background-color: red;
|
||||
height: 100px;
|
||||
width: 100px;
|
||||
}
|
||||
|
||||
@supports (margin: 0;) { div {background-color: red !important;} }
|
||||
|
||||
@supports (margin: 0) { div {background-color: green;} }
|
||||
</style>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
|
||||
<p>Test passes if there is a <strong>filled green square</strong> and <strong>no red</strong>.</p>
|
||||
|
||||
<div></div>
|
||||
|
||||
</body>
|
||||
</html>
|
|
@ -0,0 +1,42 @@
|
|||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title>CSS Test (Conditional Rules): a supports condition declaration can not end with a semi-colon</title>
|
||||
<link rel="author" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/">
|
||||
<link rel="help" href="http://www.w3.org/TR/css3-conditional/#at-supports" title="6. Feature queries: the '@supports' rule">
|
||||
<link rel="match" href="../../../../expected/wpt-import/css/css-conditional/at-supports-001-ref.html">
|
||||
<meta name="flags" content="invalid">
|
||||
<meta name="assert" content="Each individual single supports condition declaration can not end up with a semi-colon ';'. A semi-colon is a punctuation separator of multiple CSS declarations and thus is not part of an individual CSS declaration per se.">
|
||||
|
||||
<!--
|
||||
|
||||
supports_condition_in_parens
|
||||
: ( '(' S* supports_condition ')' S* ) | supports_declaration_condition |
|
||||
general_enclosed
|
||||
;
|
||||
|
||||
-->
|
||||
|
||||
<style>
|
||||
div
|
||||
{
|
||||
background-color: red;
|
||||
height: 100px;
|
||||
width: 100px;
|
||||
}
|
||||
|
||||
@supports (margin: 0) { div {background-color: green;} }
|
||||
|
||||
@supports (margin: 0;) { div {background-color: red;} }
|
||||
</style>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
|
||||
<p>Test passes if there is a <strong>filled green square</strong> and <strong>no red</strong>.</p>
|
||||
|
||||
<div></div>
|
||||
|
||||
</body>
|
||||
</html>
|
Loading…
Add table
Add a link
Reference in a new issue