summaryrefslogtreecommitdiffabout
path: root/kabc/vcard/ContentLine.cpp
authorulf69 <ulf69>2004-08-19 23:29:05 (UTC)
committer ulf69 <ulf69>2004-08-19 23:29:05 (UTC)
commitd81fbb0a720ba6eb0fbfa1d1eb0748877237a27e (patch) (side-by-side diff)
tree9b723a5c4f7da306036495e35d1863fbee646984 /kabc/vcard/ContentLine.cpp
parentd9b7a7296b031b3cf3e510a163367b9c4ab42d7a (diff)
downloadkdepimpi-d81fbb0a720ba6eb0fbfa1d1eb0748877237a27e.zip
kdepimpi-d81fbb0a720ba6eb0fbfa1d1eb0748877237a27e.tar.gz
kdepimpi-d81fbb0a720ba6eb0fbfa1d1eb0748877237a27e.tar.bz2
bugfix: memoryleak in vCards during loading of addressbooks
Diffstat (limited to 'kabc/vcard/ContentLine.cpp') (more/less context) (ignore whitespace changes)
-rw-r--r--kabc/vcard/ContentLine.cpp103
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
@@ -3,5 +3,5 @@
Copyright (C) 1999 Rik Hemsley rik@kde.org
-
+
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to
@@ -69,4 +69,5 @@ ContentLine::ContentLine()
value_(0)
{
+ paramList_.setAutoDelete( TRUE );
}
@@ -75,7 +76,22 @@ ContentLine::ContentLine(const ContentLine & x)
group_ (x.group_),
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);
+ }
+
}
@@ -84,4 +100,5 @@ ContentLine::ContentLine(const QCString & s)
value_(0)
{
+ paramList_.setAutoDelete( TRUE );
}
@@ -90,6 +107,14 @@ 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();
@@ -111,7 +136,7 @@ ContentLine::operator == (ContentLine & x)
{
x.parse();
-
+
QPtrListIterator<Param> it(x.paramList());
-
+
if (!paramList_.find(it.current()))
return false;
@@ -130,40 +155,40 @@ ContentLine::_parse()
{
vDebug("parse");
-
+
// Unqote newlines
strRep_ = strRep_.replace( QRegExp( "\\\\n" ), "\n" );
-
+
int split = strRep_.find(':');
-
+
if (split == -1) { // invalid content line
vDebug("No ':'");
return;
}
-
+
QCString firstPart(strRep_.left(split));
QCString valuePart(strRep_.mid(split + 1));
-
+
split = firstPart.find('.');
-
+
if (split != -1) {
group_ = firstPart.left(split);
firstPart = firstPart.mid(split + 1);
}
-
+
vDebug("Group == " + group_);
vDebug("firstPart == " + firstPart);
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 !
vDebug("No name for this content line !");
return;
}
-
+
name_ = l.at(0);
@@ -171,14 +196,14 @@ ContentLine::_parse()
// Remove the name part.
l.remove(0u);
-
+
entityType_ = EntityNameToEntityType(name_);
paramType_ = EntityTypeToParamType(entityType_);
-
+
unsigned int i = 0;
-
+
// For each parameter, create a new parameter of the correct type.
QStrListIterator it(l);
-
+
for (; it.current(); ++it, i++) {
@@ -190,19 +215,19 @@ ContentLine::_parse()
continue;
}
-
+
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;
p->setName( paraName );
p->setValue( *it2 );
-
+
paramList_.append(p);
}
@@ -212,9 +237,9 @@ ContentLine::_parse()
valueType_ = EntityTypeToValueType(entityType_);
-
+
// kdDebug(5710) << "valueType: " << valueType_ << endl;
-
+
switch (valueType_) {
-
+
case ValueSound: value_ = new SoundValue; break;
case ValueAgent: value_ = new AgentValue; break;
@@ -236,5 +261,5 @@ ContentLine::_parse()
default: value_ = new TextValue; break;
}
-
+
*value_ = valuePart;
}
@@ -247,16 +272,16 @@ ContentLine::_assemble()
QCString line;
-
+
if (!group_.isEmpty())
line += group_ + '.';
-
+
line += name_;
vDebug("Adding parameters");
ParamListIterator it(paramList_);
-
+
for (; it.current(); ++it)
line += ";" + it.current()->asString();
-
+
vDebug("Adding value");
if (value_ != 0)
@@ -267,5 +292,5 @@ ContentLine::_assemble()
// Quote newlines
line = line.replace( QRegExp( "\n" ), "\\n" );
-
+
// Fold lines longer than 72 chars
const int maxLen = 72;