diff --git a/Tests/LibWeb/Layout/expected/hidden-root-element.txt b/Tests/LibWeb/Layout/expected/hidden-root-element.txt
new file mode 100644
index 00000000000..fe53551f0bb
--- /dev/null
+++ b/Tests/LibWeb/Layout/expected/hidden-root-element.txt
@@ -0,0 +1,3 @@
+Viewport <#document> at (0,0) content-size 800x600 children: not-inline
+
+ViewportPaintable (Viewport<#document>) [0,0 800x600]
diff --git a/Tests/LibWeb/Layout/input/hidden-root-element.html b/Tests/LibWeb/Layout/input/hidden-root-element.html
new file mode 100644
index 00000000000..28f88b1b0bf
--- /dev/null
+++ b/Tests/LibWeb/Layout/input/hidden-root-element.html
@@ -0,0 +1,5 @@
+
+
+ Test passes if we don't crash
+
+
diff --git a/Userland/Libraries/LibWeb/DOM/Document.cpp b/Userland/Libraries/LibWeb/DOM/Document.cpp
index 1fafa722a4f..b44de964608 100644
--- a/Userland/Libraries/LibWeb/DOM/Document.cpp
+++ b/Userland/Libraries/LibWeb/DOM/Document.cpp
@@ -1058,13 +1058,14 @@ void Document::update_layout()
if (!navigable)
return;
+ auto* document_element = this->document_element();
auto viewport_rect = this->viewport_rect();
if (!m_layout_root) {
Layout::TreeBuilder tree_builder;
m_layout_root = verify_cast(*tree_builder.build(*this));
- if (auto* document_element = this->document_element()) {
+ if (document_element && document_element->layout_node()) {
propagate_overflow_to_viewport(*document_element, *m_layout_root);
}
}
@@ -1079,8 +1080,7 @@ void Document::update_layout()
viewport_state.set_content_width(viewport_rect.width());
viewport_state.set_content_height(viewport_rect.height());
- if (auto* document_element = this->document_element()) {
- VERIFY(document_element->layout_node());
+ if (document_element && document_element->layout_node()) {
auto& icb_state = layout_state.get_mutable(verify_cast(*document_element->layout_node()));
icb_state.set_content_width(viewport_rect.width());
}