+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.
{
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)
{
{
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>
{
virtual String nullItem() const { return String(); }
};
- // Specialization for FloatPoint...
+ // Specialization for FloatPoint
template<>
class SVGList<FloatPoint> : public SVGListBase<FloatPoint>
{