2006-09-13 Nikolas Zimmermann <zimmermann@kde.org>
authoreseidel <eseidel@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Wed, 13 Sep 2006 22:07:23 +0000 (22:07 +0000)
committereseidel <eseidel@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Wed, 13 Sep 2006 22:07:23 +0000 (22:07 +0000)
        Reviewed by eseidel.  Landed by eseidel.

        Fix newly introduced memory leaks in SVG.
        http://bugzilla.opendarwin.org/show_bug.cgi?id=10835

        * ksvg2/svg/SVGList.h:
        (WebCore::SVGListBase::~SVGListBase):
        (WebCore::SVGListBase::clearVector):
        (WebCore::SVGListBase::clear):
        (WebCore::SVGList::clearVector):
        (WebCore::):
        * ksvg2/svg/SVGNumberList.cpp: s/float/double/ - forgot that!
        (SVGNumberList::SVGNumberList):
        * ksvg2/svg/SVGNumberList.h: Ditto.

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

WebCore/ChangeLog
WebCore/ksvg2/svg/SVGList.h
WebCore/ksvg2/svg/SVGNumberList.cpp
WebCore/ksvg2/svg/SVGNumberList.h

index 9bc03744111fd9be3263a404f828029855aae3d4..2968421e98167b1c7de9a2995024380dba1b0bac 100644 (file)
@@ -1,3 +1,20 @@
+2006-09-13  Nikolas Zimmermann  <zimmermann@kde.org>
+
+        Reviewed by eseidel.  Landed by eseidel.
+
+        Fix newly introduced memory leaks in SVG.
+        http://bugzilla.opendarwin.org/show_bug.cgi?id=10835
+
+        * ksvg2/svg/SVGList.h:
+        (WebCore::SVGListBase::~SVGListBase):
+        (WebCore::SVGListBase::clearVector):
+        (WebCore::SVGListBase::clear):
+        (WebCore::SVGList::clearVector):
+        (WebCore::):
+        * ksvg2/svg/SVGNumberList.cpp: s/float/double/ - forgot that!
+        (SVGNumberList::SVGNumberList):
+        * ksvg2/svg/SVGNumberList.h: Ditto.
+
 2006-09-13  MorganL  <morlmor@yahoo.com>
 
         Reviewed/landed by aroben.
index e29d006bed345aa3b3c7c87f86ad05dc5e5e47c8..8497c85385abc929dc7b97e3858abf05a3879233 100644 (file)
@@ -39,12 +39,14 @@ namespace WebCore {
     {
     public:
         SVGListBase() { }
-        virtual ~SVGListBase() { }
+        virtual ~SVGListBase() { clearVector(m_vector); }
 
+        // To be implemented by the SVGList specializations!
         virtual Item nullItem() const = 0;
+        virtual void clearVector(Vector<Item>& vector) const { vector.clear(); }
 
         unsigned int numberOfItems() const { return m_vector.size(); }
-        void clear(ExceptionCode &) { m_vector.clear(); }
+        void clear(ExceptionCode &) { clearVector(m_vector); }
 
         Item initialize(Item newItem, ExceptionCode& ec)
         {
@@ -137,9 +139,28 @@ namespace WebCore {
     {
     public:
         virtual Item nullItem() const { return 0; }
+
+        virtual void clearVector(Vector<Item>& vector) const
+        {
+            typedef typename Vector<Item>::const_iterator iterator;
+            
+            iterator end = vector.end();
+            for (iterator it = vector.begin(); it != end; ++it)
+                (*it)->deref();
+
+            vector.clear();    
+        }
+    };
+
+    // Specialization for double
+    template<>
+    class SVGList<double> : public SVGListBase<double>
+    {
+    public:
+        virtual double nullItem() const { return 0.0; }
     };
 
-    // Specialization for String...
+    // Specialization for String
     template<>
     class SVGList<String> : public SVGListBase<String>
     {
@@ -147,7 +168,7 @@ namespace WebCore {
         virtual String nullItem() const { return String(); }
     };
 
-    // Specialization for FloatPoint...
+    // Specialization for FloatPoint
     template<>
     class SVGList<FloatPoint> : public SVGListBase<FloatPoint>
     {
index c94a81593dce39259813a222c2c31d4575ecfe12..dc99cd50cfb3fe73aa229aaba8d5edccab303ff0 100644 (file)
@@ -32,7 +32,7 @@
 using namespace WebCore;
 
 SVGNumberList::SVGNumberList()
-    : SVGList<float>()
+    : SVGList<double>()
 {
 }
 
index 9d5e9360e59a92d8ec780bc163138c251fa6370b..c3b0a43f3dcb4beb59ada44d6011436508cf7fec 100644 (file)
@@ -29,7 +29,7 @@
 
 namespace WebCore
 {
-    class SVGNumberList : public SVGList<float>
+    class SVGNumberList : public SVGList<double>
     {
     public:
         SVGNumberList();