1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-07-25 13:27:35 +00:00

LibWeb: Don't infer SVG viewBox if width and/or height is zero

The fix here has two parts:
1. Don't use the fallback viewBox at all if we're not in SVG-as-image.
2. Don't make a fallback viewBox with zero width and/or height.

This fixes a crash on Bandcamp pages. Thanks Tim Flynn for reporting!
This commit is contained in:
Andreas Kling 2023-06-20 19:55:53 +02:00
parent ffd5b3da16
commit 0ec522ab54
4 changed files with 31 additions and 2 deletions

View file

@ -104,7 +104,7 @@ void SVGSVGElement::update_fallback_view_box_for_svg_as_image()
height = height_value->as_length().length().absolute_length_to_px().to_double();
}
if (width.has_value() && height.has_value()) {
if (width.has_value() && width.value() > 0 && height.has_value() && height.value() > 0) {
m_fallback_view_box_for_svg_as_image = ViewBox { 0, 0, width.value(), height.value() };
} else {
m_fallback_view_box_for_svg_as_image = {};
@ -121,7 +121,8 @@ Optional<ViewBox> SVGSVGElement::view_box() const
if (m_view_box.has_value())
return m_view_box;
if (m_fallback_view_box_for_svg_as_image.has_value())
// NOTE: If the parent is a document, we're an <svg> element used as an image.
if (parent() && parent()->is_document() && m_fallback_view_box_for_svg_as_image.has_value())
return m_fallback_view_box_for_svg_as_image;
return {};