author | ulf69 <ulf69> | 2004-08-19 23:29:05 (UTC) |
---|---|---|
committer | ulf69 <ulf69> | 2004-08-19 23:29:05 (UTC) |
commit | d81fbb0a720ba6eb0fbfa1d1eb0748877237a27e (patch) (side-by-side diff) | |
tree | 9b723a5c4f7da306036495e35d1863fbee646984 /kabc/vcard/ContentLine.cpp | |
parent | d9b7a7296b031b3cf3e510a163367b9c4ab42d7a (diff) | |
download | kdepimpi-d81fbb0a720ba6eb0fbfa1d1eb0748877237a27e.zip kdepimpi-d81fbb0a720ba6eb0fbfa1d1eb0748877237a27e.tar.gz kdepimpi-d81fbb0a720ba6eb0fbfa1d1eb0748877237a27e.tar.bz2 |
bugfix: memoryleak in vCards during loading of addressbooks
-rw-r--r-- | kabc/vcard/ContentLine.cpp | 103 |
1 files changed, 64 insertions, 39 deletions
diff --git a/kabc/vcard/ContentLine.cpp b/kabc/vcard/ContentLine.cpp index 6fa1a8f..0fb5b5d 100644 --- a/kabc/vcard/ContentLine.cpp +++ b/kabc/vcard/ContentLine.cpp @@ -4,3 +4,3 @@ Copyright (C) 1999 Rik Hemsley rik@kde.org - + Permission is hereby granted, free of charge, to any person obtaining a copy @@ -70,2 +70,3 @@ ContentLine::ContentLine() { + paramList_.setAutoDelete( TRUE ); } @@ -76,5 +77,20 @@ ContentLine::ContentLine(const ContentLine & x) name_ (x.name_), - paramList_(x.paramList_), - value_(x.value_->clone()) +/*US paramList_(x.paramList_),*/ + value_(x.value_->clone()), + paramType_(x.paramType_), + valueType_(x.valueType_), + entityType_(x.entityType_) { + paramList_.setAutoDelete( TRUE ); + + + ParamListIterator it(x.paramList_); + for (; it.current(); ++it) + { + Param *p = new Param; + p->setName( it.current()->name() ); + p->setValue( it.current()->value() ); + paramList_.append(p); + } + } @@ -85,2 +101,3 @@ ContentLine::ContentLine(const QCString & s) { + paramList_.setAutoDelete( TRUE ); } @@ -91,4 +108,12 @@ ContentLine::operator = (ContentLine & x) if (*this == x) return *this; - - paramList_ = x.paramList(); + + ParamListIterator it(x.paramList_); + for (; it.current(); ++it) + { + Param *p = new Param; + p->setName( it.current()->name() ); + p->setValue( it.current()->value() ); + paramList_.append(p); + } + value_ = x.value_->clone(); @@ -112,5 +137,5 @@ ContentLine::operator == (ContentLine & x) x.parse(); - + QPtrListIterator<Param> it(x.paramList()); - + if (!paramList_.find(it.current())) @@ -131,8 +156,8 @@ ContentLine::_parse() vDebug("parse"); - + // Unqote newlines strRep_ = strRep_.replace( QRegExp( "\\\\n" ), "\n" ); - + int split = strRep_.find(':'); - + if (split == -1) { // invalid content line @@ -141,8 +166,8 @@ ContentLine::_parse() } - + QCString firstPart(strRep_.left(split)); QCString valuePart(strRep_.mid(split + 1)); - + split = firstPart.find('.'); - + if (split != -1) { @@ -151,3 +176,3 @@ ContentLine::_parse() } - + vDebug("Group == " + group_); @@ -155,9 +180,9 @@ ContentLine::_parse() vDebug("valuePart == " + valuePart); - + // Now we have the group, the name and param list together and the value. - + QStrList l; - + RTokenise(firstPart, ";", l); - + if (l.count() == 0) {// invalid - no name ! @@ -166,3 +191,3 @@ ContentLine::_parse() } - + name_ = l.at(0); @@ -172,8 +197,8 @@ ContentLine::_parse() l.remove(0u); - + entityType_ = EntityNameToEntityType(name_); paramType_ = EntityTypeToParamType(entityType_); - + unsigned int i = 0; - + // For each parameter, create a new parameter of the correct type. @@ -181,3 +206,3 @@ ContentLine::_parse() QStrListIterator it(l); - + for (; it.current(); ++it, i++) { @@ -191,13 +216,13 @@ ContentLine::_parse() } - + QCString paraName = str.left(split); QCString paraValue = str.mid(split + 1); - + QStrList paraValues; RTokenise(paraValue, ",", paraValues); - + QStrListIterator it2( paraValues ); - - for(; it2.current(); ++it2) { - + + for(; it2.current(); ++it2) { + Param *p = new Param; @@ -205,3 +230,3 @@ ContentLine::_parse() p->setValue( *it2 ); - + paramList_.append(p); @@ -213,7 +238,7 @@ ContentLine::_parse() valueType_ = EntityTypeToValueType(entityType_); - + // kdDebug(5710) << "valueType: " << valueType_ << endl; - + switch (valueType_) { - + case ValueSound: value_ = new SoundValue; break; @@ -237,3 +262,3 @@ ContentLine::_parse() } - + *value_ = valuePart; @@ -248,6 +273,6 @@ ContentLine::_assemble() QCString line; - + if (!group_.isEmpty()) line += group_ + '.'; - + line += name_; @@ -256,6 +281,6 @@ ContentLine::_assemble() ParamListIterator it(paramList_); - + for (; it.current(); ++it) line += ";" + it.current()->asString(); - + vDebug("Adding value"); @@ -268,3 +293,3 @@ ContentLine::_assemble() line = line.replace( QRegExp( "\n" ), "\\n" ); - + // Fold lines longer than 72 chars |