Reviewed by Beth Dakin.
authorggaren <ggaren@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Thu, 22 Mar 2007 04:05:28 +0000 (04:05 +0000)
committerggaren <ggaren@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Thu, 22 Mar 2007 04:05:28 +0000 (04:05 +0000)
        A little cleanup based work I've been doing on the SVG parsers.

        * ksvg2/svg/SVGParserUtilities.h:
        (WebCore::skipString):
        * ksvg2/svg/SVGPreserveAspectRatio.cpp: Moved checkString into
        SVGParserUtilities.h, so it could be with all its friends. Renamed
        "checkString" to "skipString" to match the rest of the code and to be
        clear about which functions move the buffer pointer.
        (WebCore::SVGPreserveAspectRatio::parsePreserveAspectRatio):
        * ksvg2/svg/SVGTransformable.cpp:
        (WebCore::SVGTransformable::parseTransformAttribute): Changed gotos into
        returns. Removed unnecessary magic number.

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

WebCore/ChangeLog
WebCore/ksvg2/svg/SVGParserUtilities.h
WebCore/ksvg2/svg/SVGPreserveAspectRatio.cpp
WebCore/ksvg2/svg/SVGTransformable.cpp

index 6ce88b5..3d01f18 100644 (file)
@@ -2,6 +2,23 @@
 
         Reviewed by Beth Dakin.
         
+        A little cleanup based work I've been doing on the SVG parsers.
+
+        * ksvg2/svg/SVGParserUtilities.h:
+        (WebCore::skipString):
+        * ksvg2/svg/SVGPreserveAspectRatio.cpp: Moved checkString into
+        SVGParserUtilities.h, so it could be with all its friends. Renamed 
+        "checkString" to "skipString" to match the rest of the code and to be 
+        clear about which functions move the buffer pointer.
+        (WebCore::SVGPreserveAspectRatio::parsePreserveAspectRatio):
+        * ksvg2/svg/SVGTransformable.cpp:
+        (WebCore::SVGTransformable::parseTransformAttribute): Changed gotos into 
+        returns. Removed unnecessary magic number.
+
+2007-03-21  Geoffrey Garen  <ggaren@apple.com>
+
+        Reviewed by Beth Dakin.
+        
         Fixed <rdar://problem/5078471> SVG rgb color parser runs past end of 
         buffer when running fuzzing test
 
index 15056ad..4ce4025 100644 (file)
@@ -55,9 +55,9 @@ namespace WebCore
         return ptr < end;
     }
 
-    static inline bool checkString(const UChar*& ptr, const UChar*& end, const UChar* name, int length)
+    static inline bool skipString(const UChar*& ptr, const UChar*& end, const UChar* name, int length)
     {
-        if ((end - ptr) < length)
+        if (end - ptr < length)
             return false;
         if (memcmp(name, ptr, sizeof(UChar) * length))
             return false;
@@ -65,6 +65,18 @@ namespace WebCore
         return true;
     }
 
+    static inline bool skipString(const UChar*& ptr, const UChar*& end, const char* str)
+    {
+        int length = strlen(str);
+        if (end - ptr < length)
+            return false;
+        for (int i = 0; i < length; ++i)
+            if (ptr[i] != str[i])
+                return false;
+        ptr += length;
+        return true;
+    }
+
     class SVGPolyParser
     {
     public:
index 634c776..642d15c 100644 (file)
 
 namespace WebCore {
 
-static bool checkString(const UChar*& ptr, const UChar*& end, const char* str)
-{
-    int length = strlen(str);
-    if (end - ptr < length)
-        return false;
-    for (int i = 0; i < length; ++i)
-        if (ptr[i] != str[i])
-            return false;
-    ptr += length;
-    return true;
-}
-
 SVGPreserveAspectRatio::SVGPreserveAspectRatio(const SVGStyledElement* context)
     : Shared<SVGPreserveAspectRatio>()
     , m_align(SVG_PRESERVEASPECTRATIO_XMIDYMID)
@@ -88,7 +76,7 @@ void SVGPreserveAspectRatio::parsePreserveAspectRatio(const String& string)
         goto bail_out;
 
     if (*currParam == 'd') {
-        if (!checkString(currParam, end, "defer"))
+        if (!skipString(currParam, end, "defer"))
             goto bail_out;
         // FIXME: We just ignore the "defer" here.
         if (!skipOptionalSpaces(currParam, end))
@@ -96,7 +84,7 @@ void SVGPreserveAspectRatio::parsePreserveAspectRatio(const String& string)
     }
 
     if (*currParam == 'n') {
-        if (!checkString(currParam, end, "none"))
+        if (!skipString(currParam, end, "none"))
             goto bail_out;
         skipOptionalSpaces(currParam, end);
     } else if (*currParam == 'x') {
@@ -152,11 +140,11 @@ void SVGPreserveAspectRatio::parsePreserveAspectRatio(const String& string)
 
     if (currParam < end) {
         if (*currParam == 'm') {
-            if (!checkString(currParam, end, "meet"))
+            if (!skipString(currParam, end, "meet"))
                 goto bail_out;
             skipOptionalSpaces(currParam, end);
         } else if (*currParam == 's') {
-            if (!checkString(currParam, end, "slice"))
+            if (!skipString(currParam, end, "slice"))
                 goto bail_out;
             skipOptionalSpaces(currParam, end);
             if (align != SVG_PRESERVEASPECTRATIO_NONE)
index b3c2112..9daefb3 100644 (file)
@@ -114,7 +114,7 @@ static const UChar matrixDesc[] =  {'m','a','t','r', 'i', 'x'};
 
 bool SVGTransformable::parseTransformAttribute(SVGTransformList* list, const AtomicString& transform)
 {
-    double x[6] = {0, 0, 0, 0, 0, 0};
+    double x[] = {0, 0, 0, 0, 0, 0};
     int nr = 0, required = 0, optional = 0;
     
     const UChar* currTransform = transform.characters();
@@ -130,37 +130,37 @@ bool SVGTransformable::parseTransformAttribute(SVGTransformList* list, const Ato
             return false;
         
         if (*currTransform == 's') {
-            if (checkString(currTransform, end, skewXDesc, sizeof(skewXDesc) / sizeof(UChar))) {
+            if (skipString(currTransform, end, skewXDesc, sizeof(skewXDesc) / sizeof(UChar))) {
                 required = 1;
                 optional = 0;
                 type = SVGTransform::SVG_TRANSFORM_SKEWX;
-            } else if (checkString(currTransform, end, skewYDesc, sizeof(skewYDesc) / sizeof(UChar))) {
+            } else if (skipString(currTransform, end, skewYDesc, sizeof(skewYDesc) / sizeof(UChar))) {
                 required = 1;
                 optional = 0;
                 type = SVGTransform::SVG_TRANSFORM_SKEWY;
-            } else if (checkString(currTransform, end, scaleDesc, sizeof(scaleDesc) / sizeof(UChar))) {
+            } else if (skipString(currTransform, end, scaleDesc, sizeof(scaleDesc) / sizeof(UChar))) {
                 required = 1;
                 optional = 1;
                 type = SVGTransform::SVG_TRANSFORM_SCALE;
             } else
-                goto bail_out;
-        } else if (checkString(currTransform, end, translateDesc, sizeof(translateDesc) / sizeof(UChar))) {
+                return false;
+        } else if (skipString(currTransform, end, translateDesc, sizeof(translateDesc) / sizeof(UChar))) {
             required = 1;
             optional = 1;
             type = SVGTransform::SVG_TRANSFORM_TRANSLATE;
-        } else if (checkString(currTransform, end, rotateDesc, sizeof(rotateDesc) / sizeof(UChar))) {
+        } else if (skipString(currTransform, end, rotateDesc, sizeof(rotateDesc) / sizeof(UChar))) {
             required = 1;
             optional = 2;
             type = SVGTransform::SVG_TRANSFORM_ROTATE;
-        } else if (checkString(currTransform, end, matrixDesc, sizeof(matrixDesc) / sizeof(UChar))) {
+        } else if (skipString(currTransform, end, matrixDesc, sizeof(matrixDesc) / sizeof(UChar))) {
             required = 6;
             optional = 0;
             type = SVGTransform::SVG_TRANSFORM_MATRIX;
         } else 
-            goto bail_out;
+            return false;
 
         if ((nr = parseTransformParamList(currTransform, end, x, required, optional)) < 0)
-            goto bail_out;
+            return false;
 
         SVGTransform t;
 
@@ -205,9 +205,6 @@ bool SVGTransformable::parseTransformAttribute(SVGTransformList* list, const Ato
     }
 
     return !delimParsed;
-
-bail_out: ;
-    return false;
 }
 
 }