From 781287c1e38aa55f3bb283ead7a9b3776c340b77 Mon Sep 17 00:00:00 2001 From: Timothy Flynn Date: Fri, 14 Apr 2023 08:43:47 -0400 Subject: [PATCH] LibWeb: Do not dereference empty Optional in ReadableStream::visit_edges There are quite a few steps between a ReadableStream being created and its controller being set. If GC occurs between those points, we will have an empty Optional in ReadableStream::visit_edges. Seen on YouTube. --- Userland/Libraries/LibWeb/Streams/ReadableStream.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Userland/Libraries/LibWeb/Streams/ReadableStream.cpp b/Userland/Libraries/LibWeb/Streams/ReadableStream.cpp index ef321ad4cb..de150649c6 100644 --- a/Userland/Libraries/LibWeb/Streams/ReadableStream.cpp +++ b/Userland/Libraries/LibWeb/Streams/ReadableStream.cpp @@ -108,7 +108,8 @@ JS::ThrowCompletionOr ReadableStream::initialize(JS::Realm& realm) void ReadableStream::visit_edges(Cell::Visitor& visitor) { Base::visit_edges(visitor); - m_controller->visit([&](auto& controller) { visitor.visit(controller); }); + if (m_controller.has_value()) + m_controller->visit([&](auto& controller) { visitor.visit(controller); }); visitor.visit(m_stored_error); visitor.visit(m_reader); }