2007-12-15 Alp Toker <alp@atoker.com>
authoralp@webkit.org <alp@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Sat, 15 Dec 2007 13:12:34 +0000 (13:12 +0000)
committeralp@webkit.org <alp@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Sat, 15 Dec 2007 13:12:34 +0000 (13:12 +0000)
        Reviewed by Mark Rowe.

        http://bugs.webkit.org/show_bug.cgi?id=16449
        cairo_arc() functions hang or crash when passed inf as radius or start/end angle

        Add checks. This matches a similar workaround for a CG bug in the CG
        graphics backend: <rdar://problem/5189233>

        Fixes:
          fast/canvas/arc-crash.html
          fast/canvas/canvas-with-incorrect-args.html

        * platform/graphics/cairo/PathCairo.cpp:
        (WebCore::Path::addArc):

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@28751 268f45cc-cd09-0410-ab3c-d52691b4dbfc

WebCore/ChangeLog
WebCore/platform/graphics/cairo/PathCairo.cpp

index 61ff40a3d2153aebbc4543543709e0a1dd059a58..69f70a1f7de3d6e06ff0ab33c332c5b2e9544b95 100644 (file)
@@ -1,3 +1,20 @@
+2007-12-15  Alp Toker  <alp@atoker.com>
+
+        Reviewed by Mark Rowe.
+
+        http://bugs.webkit.org/show_bug.cgi?id=16449
+        cairo_arc() functions hang or crash when passed inf as radius or start/end angle
+
+        Add checks. This matches a similar workaround for a CG bug in the CG
+        graphics backend: <rdar://problem/5189233>
+
+        Fixes:
+          fast/canvas/arc-crash.html
+          fast/canvas/canvas-with-incorrect-args.html
+
+        * platform/graphics/cairo/PathCairo.cpp:
+        (WebCore::Path::addArc):
+
 2007-12-15  Alexey Proskuryakov  <ap@webkit.org>
 
         Reviewed by Darin.
index d1d11b210cf7e80470fd410493362c39a39ba195..0e2a09a62f65625332cc352916140f431a4c912e 100644 (file)
@@ -3,7 +3,7 @@
     Copyright (C) 2004, 2005, 2006 Nikolas Zimmermann <wildfox@kde.org>
                   2004, 2005, 2006 Rob Buis <buis@kde.org>
                   2005, 2007 Apple Inc. All Rights reserved.
-                  2007 Alp Toker <alp.toker@collabora.co.uk>
+                  2007 Alp Toker <alp@atoker.com>
 
     This library is free software; you can redistribute it and/or
     modify it under the terms of the GNU Library General Public
@@ -29,9 +29,9 @@
 #include "FloatRect.h"
 #include "NotImplemented.h"
 #include "PlatformString.h"
+
 #include <cairo.h>
 #include <math.h>
-#include <stdio.h>
 
 namespace WebCore {
 
@@ -138,6 +138,11 @@ void Path::addBezierCurveTo(const FloatPoint& controlPoint1, const FloatPoint& c
 
 void Path::addArc(const FloatPoint& p, float r, float sa, float ea, bool clockwise)
 {
+    // http://bugs.webkit.org/show_bug.cgi?id=16449
+    // cairo_arc() functions hang or crash when passed inf as radius or start/end angle
+    if (!isfinite(r) || !isfinite(sa) || !isfinite(ea))
+        return;
+
     cairo_t* cr = platformPath()->m_cr;
     if (clockwise)
         cairo_arc(cr, p.x(), p.y(), r, sa, ea);