diff --git a/Tests/LibWeb/Ref/canvas-arcs-and-ellipses.html b/Tests/LibWeb/Ref/canvas-arcs-and-ellipses.html
new file mode 100644
index 00000000000..b942d944b14
--- /dev/null
+++ b/Tests/LibWeb/Ref/canvas-arcs-and-ellipses.html
@@ -0,0 +1,22 @@
+
+
+
+
diff --git a/Tests/LibWeb/Ref/reference/canvas-arcs-and-ellipses-ref.html b/Tests/LibWeb/Ref/reference/canvas-arcs-and-ellipses-ref.html
new file mode 100644
index 00000000000..26021750221
--- /dev/null
+++ b/Tests/LibWeb/Ref/reference/canvas-arcs-and-ellipses-ref.html
@@ -0,0 +1,9 @@
+
+
diff --git a/Tests/LibWeb/Ref/reference/images/canvas-arcs-and-ellipses-ref.png b/Tests/LibWeb/Ref/reference/images/canvas-arcs-and-ellipses-ref.png
new file mode 100644
index 00000000000..d5cfd94dd70
Binary files /dev/null and b/Tests/LibWeb/Ref/reference/images/canvas-arcs-and-ellipses-ref.png differ
diff --git a/Userland/Libraries/LibWeb/HTML/Canvas/CanvasPath.cpp b/Userland/Libraries/LibWeb/HTML/Canvas/CanvasPath.cpp
index 77eaefa2c77..14c88b1767a 100644
--- a/Userland/Libraries/LibWeb/HTML/Canvas/CanvasPath.cpp
+++ b/Userland/Libraries/LibWeb/HTML/Canvas/CanvasPath.cpp
@@ -157,6 +157,8 @@ WebIDL::ExceptionOr CanvasPath::ellipse(float x, float y, float radius_x,
auto end_point = resolve_point_with_angle(end_angle);
auto delta_theta = end_angle - start_angle;
+ if (delta_theta < 0)
+ delta_theta += AK::Pi * 2;
auto transform = active_transform();