diff --git a/Libraries/LibWeb/HTML/CanvasRenderingContext2D.cpp b/Libraries/LibWeb/HTML/CanvasRenderingContext2D.cpp index 629562a16cc..2650f675bf1 100644 --- a/Libraries/LibWeb/HTML/CanvasRenderingContext2D.cpp +++ b/Libraries/LibWeb/HTML/CanvasRenderingContext2D.cpp @@ -199,8 +199,9 @@ void CanvasRenderingContext2D::did_draw(Gfx::FloatRect const&) Gfx::Painter* CanvasRenderingContext2D::painter() { - if (!canvas_element().surface()) { - allocate_painting_surface_if_needed(); + allocate_painting_surface_if_needed(); + auto surface = canvas_element().surface(); + if (!m_painter && surface) { canvas_element().document().invalidate_display_list(); m_painter = make(*canvas_element().surface()); } @@ -217,7 +218,7 @@ void CanvasRenderingContext2D::set_size(Gfx::IntSize const& size) void CanvasRenderingContext2D::allocate_painting_surface_if_needed() { - if (m_surface) + if (m_surface || m_size.is_empty()) return; auto skia_backend_context = canvas_element().navigable()->traversable_navigable()->skia_backend_context(); m_surface = Gfx::PaintingSurface::create_with_size(skia_backend_context, canvas_element().bitmap_size_for_canvas(), Gfx::BitmapFormat::BGRA8888, Gfx::AlphaType::Premultiplied); diff --git a/Tests/LibWeb/Text/expected/canvas/fill-0x0-canvas-should-not-crash.txt b/Tests/LibWeb/Text/expected/canvas/fill-0x0-canvas-should-not-crash.txt new file mode 100644 index 00000000000..da17eba72e1 --- /dev/null +++ b/Tests/LibWeb/Text/expected/canvas/fill-0x0-canvas-should-not-crash.txt @@ -0,0 +1 @@ +PASS (didn't crash!) diff --git a/Tests/LibWeb/Text/input/canvas/fill-0x0-canvas-should-not-crash.html b/Tests/LibWeb/Text/input/canvas/fill-0x0-canvas-should-not-crash.html new file mode 100644 index 00000000000..2678bf6a26b --- /dev/null +++ b/Tests/LibWeb/Text/input/canvas/fill-0x0-canvas-should-not-crash.html @@ -0,0 +1,12 @@ + + + +