瀏覽代碼

LibWeb: Add missing paintable null check in get_bounding_client_rect()

Fixes crashing on https://github.com/
Aliaksandr Kalenik 1 年之前
父節點
當前提交
8f8ec37d58

+ 1 - 0
Tests/LibWeb/Text/expected/get-bounding-client-rect-display-none.txt

@@ -0,0 +1 @@
+   {"x":0,"y":0,"width":0,"height":0,"top":0,"right":0,"bottom":0,"left":0}

+ 12 - 0
Tests/LibWeb/Text/input/get-bounding-client-rect-display-none.html

@@ -0,0 +1,12 @@
+<!DOCTYPE html>
+<style type="text/css">
+    #box { display: none; }
+</style>
+<div id="box"></div>
+<script src="include.js"></script>
+<script>
+    test(() => {
+        const rect = document.getElementById("box").getBoundingClientRect();
+        println(JSON.stringify(rect));
+    });
+</script>

+ 2 - 1
Userland/Libraries/LibWeb/DOM/Element.cpp

@@ -844,7 +844,8 @@ JS::NonnullGCPtr<Geometry::DOMRect> Element::get_bounding_client_rect() const
         return Geometry::DOMRect::create(realm(), absolute_rect.to_type<float>());
     }
 
-    if (auto const* paintable = this->paintable(); is<Painting::InlinePaintable>(*paintable)) {
+    auto const* paintable = this->paintable();
+    if (paintable && is<Painting::InlinePaintable>(*paintable)) {
         auto const& inline_paintable = static_cast<Painting::InlinePaintable const&>(*paintable);
         auto absolute_rect = inline_paintable.bounding_rect();
         absolute_rect.translate_by(-viewport_offset.x(), -viewport_offset.y());