LibWeb: Don't crash when resolving style of grid template properties

Previously, attempting to get the computed value for a
grid-template-rows or grid-template-columns property would cause a crash
if the element had no associated paintable.
This commit is contained in:
Tim Ledbetter 2024-09-12 16:28:31 +01:00 committed by Tim Ledbetter
parent fa907029ee
commit 779de840af
Notes: github-actions[bot] 2024-09-18 16:39:13 +00:00
3 changed files with 26 additions and 6 deletions

View file

@ -0,0 +1 @@
PASS (didn't crash)

View file

@ -0,0 +1,15 @@
<!DOCTYPE html>
<script src="../include.js"></script>
<script>
test(() => {
const noPaintableElement = document.createElement("br");
document.body.appendChild(noPaintableElement);
const style = getComputedStyle(noPaintableElement);
let values = [];
for (const propertyName of style) {
values.push(style[propertyName]);
}
noPaintableElement.remove();
println("PASS (didn't crash)");
});
</script>

View file

@ -523,16 +523,20 @@ RefPtr<CSSStyleValue const> ResolvedCSSStyleDeclaration::style_value_for_propert
// For grid-template-columns and grid-template-rows the resolved value is the used value.
// https://www.w3.org/TR/css-grid-2/#resolved-track-list-standalone
if (property_id == PropertyID::GridTemplateColumns) {
if (layout_node.paintable()) {
auto const& paintable_box = verify_cast<Painting::PaintableBox const>(*layout_node.paintable());
if (auto used_values_for_grid_template_columns = paintable_box.used_values_for_grid_template_columns()) {
return used_values_for_grid_template_columns;
}
}
} else if (property_id == PropertyID::GridTemplateRows) {
if (layout_node.paintable()) {
auto const& paintable_box = verify_cast<Painting::PaintableBox const>(*layout_node.paintable());
if (auto used_values_for_grid_template_rows = paintable_box.used_values_for_grid_template_rows()) {
return used_values_for_grid_template_rows;
}
}
}
if (!property_is_shorthand(property_id))
return get_computed_value(property_id);