LibWeb/CSS: Don't allow negative values in border-radius property

This commit is contained in:
Tim Ledbetter 2025-03-12 13:57:10 +00:00 committed by Sam Atkins
parent 632fc73643
commit 18cccd7633
Notes: github-actions[bot] 2025-03-14 15:09:00 +00:00
4 changed files with 53 additions and 0 deletions

View file

@ -1659,6 +1659,10 @@ RefPtr<CSSStyleValue> Parser::parse_border_radius_shorthand_value(TokenStream<Co
auto maybe_dimension = parse_length_percentage(tokens);
if (!maybe_dimension.has_value())
return nullptr;
if (maybe_dimension->is_length() && !property_accepts_length(PropertyID::BorderRadius, maybe_dimension->length()))
return nullptr;
if (maybe_dimension->is_percentage() && !property_accepts_percentage(PropertyID::BorderRadius, maybe_dimension->percentage()))
return nullptr;
if (reading_vertical) {
vertical_radii.append(maybe_dimension.release_value());
} else {

View file

@ -615,6 +615,10 @@
"border-bottom-left-radius",
"border-bottom-right-radius"
],
"valid-types": [
"length [0,∞]",
"percentage [0,∞]"
],
"percentages-resolve-to": "length"
},
"border-right": {

View file

@ -0,0 +1,16 @@
Harness status: OK
Found 11 tests
11 Pass
Pass e.style['border-radius'] = "auto" should not set the property value
Pass e.style['border-radius'] = "none" should not set the property value
Pass e.style['border-radius'] = "1px 2px 3px 4px 5px" should not set the property value
Pass e.style['border-radius'] = "-1px" should not set the property value
Pass e.style['border-radius'] = "1px -2px" should not set the property value
Pass e.style['border-radius'] = "1em /" should not set the property value
Pass e.style['border-radius'] = "1px / 2px / 3px" should not set the property value
Pass e.style['border-radius'] = "4 / 5" should not set the property value
Pass e.style['border-radius'] = "5em 1px 5em 2% 5em 3px 5em 4%" should not set the property value
Pass e.style['border-radius'] = "1px 5em 2% 5em 3px 5em 4% 5em" should not set the property value
Pass e.style['border-top-left-radius'] = "10px 20px 30px" should not set the property value

View file

@ -0,0 +1,29 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>CSS Backgrounds and Borders Module Level 3: parsing border-radius with invalid values</title>
<link rel="help" href="https://drafts.csswg.org/css-backgrounds/#border-radius">
<meta name="assert" content="border-radius supports only the grammar '<length-percentage>{1,4} [ / <length-percentage>{1,4} ]?'.">
<script src="../../../resources/testharness.js"></script>
<script src="../../../resources/testharnessreport.js"></script>
<script src="../../../css/support/parsing-testcommon.js"></script>
</head>
<body>
<script>
test_invalid_value("border-radius", "auto");
test_invalid_value("border-radius", "none");
test_invalid_value("border-radius", "1px 2px 3px 4px 5px");
test_invalid_value("border-radius", "-1px");
test_invalid_value("border-radius", "1px -2px");
test_invalid_value("border-radius", "1em /");
test_invalid_value("border-radius", "1px / 2px / 3px");
test_invalid_value("border-radius", "4 / 5");
test_invalid_value("border-radius", "5em 1px 5em 2% 5em 3px 5em 4%");
test_invalid_value("border-radius", "1px 5em 2% 5em 3px 5em 4% 5em");
test_invalid_value("border-top-left-radius", "10px 20px 30px");
</script>
</body>
</html>