From 08641c9e158b3f7e3368b10cff4fc183c5b0ebdc Mon Sep 17 00:00:00 2001 From: Tim Ledbetter Date: Mon, 20 Oct 2025 10:37:59 +0100 Subject: [PATCH] LibWeb: Ensure `CanvasPath::arc()` nonfinite radius argument is ignored --- Libraries/LibWeb/HTML/Canvas/CanvasPath.cpp | 2 +- .../path-objects/2d.path.arc.nonfinite.txt | 6 ++ .../path-objects/2d.path.arc.nonfinite.html | 77 +++++++++++++++++++ 3 files changed, 84 insertions(+), 1 deletion(-) create mode 100644 Tests/LibWeb/Text/expected/wpt-import/html/canvas/element/path-objects/2d.path.arc.nonfinite.txt create mode 100644 Tests/LibWeb/Text/input/wpt-import/html/canvas/element/path-objects/2d.path.arc.nonfinite.html diff --git a/Libraries/LibWeb/HTML/Canvas/CanvasPath.cpp b/Libraries/LibWeb/HTML/Canvas/CanvasPath.cpp index 50032d74291..a25296750a7 100644 --- a/Libraries/LibWeb/HTML/Canvas/CanvasPath.cpp +++ b/Libraries/LibWeb/HTML/Canvas/CanvasPath.cpp @@ -95,7 +95,7 @@ void CanvasPath::bezier_curve_to(double cp1x, double cp1y, double cp2x, double c WebIDL::ExceptionOr CanvasPath::arc(float x, float y, float radius, float start_angle, float end_angle, bool counter_clockwise) { - if (radius < 0) + if (radius < 0 && isfinite(radius)) return WebIDL::IndexSizeError::create(m_self->realm(), Utf16String::formatted("The radius provided ({}) is negative.", radius)); return ellipse(x, y, radius, radius, 0, start_angle, end_angle, counter_clockwise); } diff --git a/Tests/LibWeb/Text/expected/wpt-import/html/canvas/element/path-objects/2d.path.arc.nonfinite.txt b/Tests/LibWeb/Text/expected/wpt-import/html/canvas/element/path-objects/2d.path.arc.nonfinite.txt new file mode 100644 index 00000000000..149a3d81ba3 --- /dev/null +++ b/Tests/LibWeb/Text/expected/wpt-import/html/canvas/element/path-objects/2d.path.arc.nonfinite.txt @@ -0,0 +1,6 @@ +Harness status: OK + +Found 1 tests + +1 Pass +Pass arc() with Infinity/NaN is ignored \ No newline at end of file diff --git a/Tests/LibWeb/Text/input/wpt-import/html/canvas/element/path-objects/2d.path.arc.nonfinite.html b/Tests/LibWeb/Text/input/wpt-import/html/canvas/element/path-objects/2d.path.arc.nonfinite.html new file mode 100644 index 00000000000..f7032e03748 --- /dev/null +++ b/Tests/LibWeb/Text/input/wpt-import/html/canvas/element/path-objects/2d.path.arc.nonfinite.html @@ -0,0 +1,77 @@ + + + +Canvas test: 2d.path.arc.nonfinite + + + + + + +

2d.path.arc.nonfinite

+

arc() with Infinity/NaN is ignored

+ + +

Actual output:

+

FAIL (fallback content)

+

Expected output:

+

+ +