LibWeb/CSS: Reject negative <resolution> values

Gets us 3 more WPT passes.
This commit is contained in:
Sam Atkins 2025-05-22 16:35:59 +01:00
commit e251b451ef
Notes: github-actions[bot] 2025-05-23 09:18:54 +00:00
2 changed files with 10 additions and 5 deletions

View file

@ -964,6 +964,11 @@ RefPtr<CSSStyleValue const> Parser::parse_resolution_value(TokenStream<Component
if (tokens.next_token().is(Token::Type::Dimension)) {
auto transaction = tokens.begin_transaction();
auto& dimension_token = tokens.consume_a_token().token();
// The allowed range of <resolution> values always excludes negative values, in addition to any explicit
// ranges that might be specified.
// https://drafts.csswg.org/css-values-4/#resolution
if (dimension_token.dimension_value() < 0)
return nullptr;
if (auto resolution_type = Resolution::unit_from_name(dimension_token.dimension_unit()); resolution_type.has_value()) {
transaction.commit();
return ResolutionStyleValue::create(Resolution { (dimension_token.dimension_value()), resolution_type.release_value() });

View file

@ -2,8 +2,8 @@ Harness status: OK
Found 1345 tests
1269 Pass
76 Fail
1272 Pass
73 Fail
Pass query_should_be_parseable: (orientation)
Pass query_should_be_parseable: not (orientation)
Pass expression_should_be_known: (orientation)
@ -1153,7 +1153,7 @@ Pass expression_should_be_known: resolution: 0dppx
Pass expression_should_be_known: resolution: 0x
Pass expression_should_be_known: resolution: calc(6x / 2)
Pass expression_should_be_parseable: resolution: -3dpi
Fail expression_should_be_unknown: resolution: -3dpi
Pass expression_should_be_unknown: resolution: -3dpi
Pass expression_should_be_known: min-resolution: 3dpi
Pass expression_should_be_known: min-resolution:3dpi
Pass expression_should_be_known: min-resolution: 3.0dpi
@ -1169,7 +1169,7 @@ Pass expression_should_be_known: min-resolution: 0dppx
Pass expression_should_be_known: min-resolution: 0x
Pass expression_should_be_known: min-resolution: calc(6x / 2)
Pass expression_should_be_parseable: min-resolution: -3dpi
Fail expression_should_be_unknown: min-resolution: -3dpi
Pass expression_should_be_unknown: min-resolution: -3dpi
Pass expression_should_be_known: max-resolution: 3dpi
Pass expression_should_be_known: max-resolution:3dpi
Pass expression_should_be_known: max-resolution: 3.0dpi
@ -1185,7 +1185,7 @@ Pass expression_should_be_known: max-resolution: 0dppx
Pass expression_should_be_known: max-resolution: 0x
Pass expression_should_be_known: max-resolution: calc(6x / 2)
Pass expression_should_be_parseable: max-resolution: -3dpi
Fail expression_should_be_unknown: max-resolution: -3dpi
Pass expression_should_be_unknown: max-resolution: -3dpi
Pass find_resolution
Pass resolution is exact: should_apply: (resolution: ${resolution}dpi)
Pass resolution is exact: should_apply: (resolution: ${Math.floor(resolution/96)}dppx)