author | ulf69 <ulf69> | 2004-08-19 23:29:05 (UTC) |
---|---|---|
committer | ulf69 <ulf69> | 2004-08-19 23:29:05 (UTC) |
commit | d81fbb0a720ba6eb0fbfa1d1eb0748877237a27e (patch) (unidiff) | |
tree | 9b723a5c4f7da306036495e35d1863fbee646984 | |
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 | ||||
-rw-r--r-- | kabc/vcard/VCardEntity.cpp | 23 | ||||
-rw-r--r-- | kabc/vcard/VCardv.cpp | 23 |
3 files changed, 97 insertions, 52 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 @@ | |||
4 | Copyright (C) 1999 Rik Hemsley rik@kde.org | 4 | Copyright (C) 1999 Rik Hemsley rik@kde.org |
5 | 5 | ||
6 | Permission is hereby granted, free of charge, to any person obtaining a copy | 6 | Permission is hereby granted, free of charge, to any person obtaining a copy |
@@ -70,2 +70,3 @@ ContentLine::ContentLine() | |||
70 | { | 70 | { |
71 | paramList_.setAutoDelete( TRUE ); | ||
71 | } | 72 | } |
@@ -76,5 +77,20 @@ ContentLine::ContentLine(const ContentLine & x) | |||
76 | name_ (x.name_), | 77 | name_ (x.name_), |
77 | paramList_(x.paramList_), | 78 | /*US paramList_(x.paramList_),*/ |
78 | value_(x.value_->clone()) | 79 | value_(x.value_->clone()), |
80 | paramType_(x.paramType_), | ||
81 | valueType_(x.valueType_), | ||
82 | entityType_(x.entityType_) | ||
79 | { | 83 | { |
84 | paramList_.setAutoDelete( TRUE ); | ||
85 | |||
86 | |||
87 | ParamListIterator it(x.paramList_); | ||
88 | for (; it.current(); ++it) | ||
89 | { | ||
90 | Param *p = new Param; | ||
91 | p->setName( it.current()->name() ); | ||
92 | p->setValue( it.current()->value() ); | ||
93 | paramList_.append(p); | ||
94 | } | ||
95 | |||
80 | } | 96 | } |
@@ -85,2 +101,3 @@ ContentLine::ContentLine(const QCString & s) | |||
85 | { | 101 | { |
102 | paramList_.setAutoDelete( TRUE ); | ||
86 | } | 103 | } |
@@ -91,4 +108,12 @@ ContentLine::operator = (ContentLine & x) | |||
91 | if (*this == x) return *this; | 108 | if (*this == x) return *this; |
92 | 109 | ||
93 | paramList_ = x.paramList(); | 110 | ParamListIterator it(x.paramList_); |
111 | for (; it.current(); ++it) | ||
112 | { | ||
113 | Param *p = new Param; | ||
114 | p->setName( it.current()->name() ); | ||
115 | p->setValue( it.current()->value() ); | ||
116 | paramList_.append(p); | ||
117 | } | ||
118 | |||
94 | value_ = x.value_->clone(); | 119 | value_ = x.value_->clone(); |
@@ -112,5 +137,5 @@ ContentLine::operator == (ContentLine & x) | |||
112 | x.parse(); | 137 | x.parse(); |
113 | 138 | ||
114 | QPtrListIterator<Param> it(x.paramList()); | 139 | QPtrListIterator<Param> it(x.paramList()); |
115 | 140 | ||
116 | if (!paramList_.find(it.current())) | 141 | if (!paramList_.find(it.current())) |
@@ -131,8 +156,8 @@ ContentLine::_parse() | |||
131 | vDebug("parse"); | 156 | vDebug("parse"); |
132 | 157 | ||
133 | // Unqote newlines | 158 | // Unqote newlines |
134 | strRep_ = strRep_.replace( QRegExp( "\\\\n" ), "\n" ); | 159 | strRep_ = strRep_.replace( QRegExp( "\\\\n" ), "\n" ); |
135 | 160 | ||
136 | int split = strRep_.find(':'); | 161 | int split = strRep_.find(':'); |
137 | 162 | ||
138 | if (split == -1) { // invalid content line | 163 | if (split == -1) { // invalid content line |
@@ -141,8 +166,8 @@ ContentLine::_parse() | |||
141 | } | 166 | } |
142 | 167 | ||
143 | QCString firstPart(strRep_.left(split)); | 168 | QCString firstPart(strRep_.left(split)); |
144 | QCString valuePart(strRep_.mid(split + 1)); | 169 | QCString valuePart(strRep_.mid(split + 1)); |
145 | 170 | ||
146 | split = firstPart.find('.'); | 171 | split = firstPart.find('.'); |
147 | 172 | ||
148 | if (split != -1) { | 173 | if (split != -1) { |
@@ -151,3 +176,3 @@ ContentLine::_parse() | |||
151 | } | 176 | } |
152 | 177 | ||
153 | vDebug("Group == " + group_); | 178 | vDebug("Group == " + group_); |
@@ -155,9 +180,9 @@ ContentLine::_parse() | |||
155 | vDebug("valuePart == " + valuePart); | 180 | vDebug("valuePart == " + valuePart); |
156 | 181 | ||
157 | // Now we have the group, the name and param list together and the value. | 182 | // Now we have the group, the name and param list together and the value. |
158 | 183 | ||
159 | QStrList l; | 184 | QStrList l; |
160 | 185 | ||
161 | RTokenise(firstPart, ";", l); | 186 | RTokenise(firstPart, ";", l); |
162 | 187 | ||
163 | if (l.count() == 0) {// invalid - no name ! | 188 | if (l.count() == 0) {// invalid - no name ! |
@@ -166,3 +191,3 @@ ContentLine::_parse() | |||
166 | } | 191 | } |
167 | 192 | ||
168 | name_ = l.at(0); | 193 | name_ = l.at(0); |
@@ -172,8 +197,8 @@ ContentLine::_parse() | |||
172 | l.remove(0u); | 197 | l.remove(0u); |
173 | 198 | ||
174 | entityType_= EntityNameToEntityType(name_); | 199 | entityType_= EntityNameToEntityType(name_); |
175 | paramType_= EntityTypeToParamType(entityType_); | 200 | paramType_= EntityTypeToParamType(entityType_); |
176 | 201 | ||
177 | unsigned int i = 0; | 202 | unsigned int i = 0; |
178 | 203 | ||
179 | // For each parameter, create a new parameter of the correct type. | 204 | // For each parameter, create a new parameter of the correct type. |
@@ -181,3 +206,3 @@ ContentLine::_parse() | |||
181 | QStrListIterator it(l); | 206 | QStrListIterator it(l); |
182 | 207 | ||
183 | for (; it.current(); ++it, i++) { | 208 | for (; it.current(); ++it, i++) { |
@@ -191,13 +216,13 @@ ContentLine::_parse() | |||
191 | } | 216 | } |
192 | 217 | ||
193 | QCString paraName = str.left(split); | 218 | QCString paraName = str.left(split); |
194 | QCString paraValue = str.mid(split + 1); | 219 | QCString paraValue = str.mid(split + 1); |
195 | 220 | ||
196 | QStrList paraValues; | 221 | QStrList paraValues; |
197 | RTokenise(paraValue, ",", paraValues); | 222 | RTokenise(paraValue, ",", paraValues); |
198 | 223 | ||
199 | QStrListIterator it2( paraValues ); | 224 | QStrListIterator it2( paraValues ); |
200 | 225 | ||
201 | for(; it2.current(); ++it2) { | 226 | for(; it2.current(); ++it2) { |
202 | 227 | ||
203 | Param *p = new Param; | 228 | Param *p = new Param; |
@@ -205,3 +230,3 @@ ContentLine::_parse() | |||
205 | p->setValue( *it2 ); | 230 | p->setValue( *it2 ); |
206 | 231 | ||
207 | paramList_.append(p); | 232 | paramList_.append(p); |
@@ -213,7 +238,7 @@ ContentLine::_parse() | |||
213 | valueType_ = EntityTypeToValueType(entityType_); | 238 | valueType_ = EntityTypeToValueType(entityType_); |
214 | 239 | ||
215 | //kdDebug(5710) << "valueType: " << valueType_ << endl; | 240 | //kdDebug(5710) << "valueType: " << valueType_ << endl; |
216 | 241 | ||
217 | switch (valueType_) { | 242 | switch (valueType_) { |
218 | 243 | ||
219 | case ValueSound: value_ = new SoundValue;break; | 244 | case ValueSound: value_ = new SoundValue;break; |
@@ -237,3 +262,3 @@ ContentLine::_parse() | |||
237 | } | 262 | } |
238 | 263 | ||
239 | *value_ = valuePart; | 264 | *value_ = valuePart; |
@@ -248,6 +273,6 @@ ContentLine::_assemble() | |||
248 | QCString line; | 273 | QCString line; |
249 | 274 | ||
250 | if (!group_.isEmpty()) | 275 | if (!group_.isEmpty()) |
251 | line += group_ + '.'; | 276 | line += group_ + '.'; |
252 | 277 | ||
253 | line += name_; | 278 | line += name_; |
@@ -256,6 +281,6 @@ ContentLine::_assemble() | |||
256 | ParamListIterator it(paramList_); | 281 | ParamListIterator it(paramList_); |
257 | 282 | ||
258 | for (; it.current(); ++it) | 283 | for (; it.current(); ++it) |
259 | line += ";" + it.current()->asString(); | 284 | line += ";" + it.current()->asString(); |
260 | 285 | ||
261 | vDebug("Adding value"); | 286 | vDebug("Adding value"); |
@@ -268,3 +293,3 @@ ContentLine::_assemble() | |||
268 | line = line.replace( QRegExp( "\n" ), "\\n" ); | 293 | line = line.replace( QRegExp( "\n" ), "\\n" ); |
269 | 294 | ||
270 | // Fold lines longer than 72 chars | 295 | // Fold lines longer than 72 chars |
diff --git a/kabc/vcard/VCardEntity.cpp b/kabc/vcard/VCardEntity.cpp index 0c21e2f..0cd2086 100644 --- a/kabc/vcard/VCardEntity.cpp +++ b/kabc/vcard/VCardEntity.cpp | |||
@@ -4,3 +4,3 @@ | |||
4 | Copyright (C) 1998 Rik Hemsley rik@kde.org | 4 | Copyright (C) 1998 Rik Hemsley rik@kde.org |
5 | 5 | ||
6 | Permission is hereby granted, free of charge, to any person obtaining a copy | 6 | Permission is hereby granted, free of charge, to any person obtaining a copy |
@@ -33,2 +33,3 @@ VCardEntity::VCardEntity() | |||
33 | { | 33 | { |
34 | cardList_.setAutoDelete( TRUE ); | ||
34 | } | 35 | } |
@@ -38,2 +39,3 @@ VCardEntity::VCardEntity(const VCardEntity & x) | |||
38 | { | 39 | { |
40 | cardList_.setAutoDelete( TRUE ); | ||
39 | } | 41 | } |
@@ -43,2 +45,3 @@ VCardEntity::VCardEntity(const QCString & s) | |||
43 | { | 45 | { |
46 | cardList_.setAutoDelete( TRUE ); | ||
44 | } | 47 | } |
@@ -77,17 +80,17 @@ VCardEntity::_parse() | |||
77 | QCString s(strRep_); | 80 | QCString s(strRep_); |
78 | 81 | ||
79 | int i = s.find(QRegExp("BEGIN:VCARD", false)); | 82 | int i = s.find(QRegExp("BEGIN:VCARD", false)); |
80 | 83 | ||
81 | while (i != -1) { | 84 | while (i != -1) { |
82 | 85 | ||
83 | i = s.find(QRegExp("BEGIN:VCARD", false), 11); | 86 | i = s.find(QRegExp("BEGIN:VCARD", false), 11); |
84 | 87 | ||
85 | QCString cardStr(s.left(i)); | 88 | QCString cardStr(s.left(i)); |
86 | 89 | ||
87 | VCard * v = new VCard(cardStr); | 90 | VCard * v = new VCard(cardStr); |
88 | 91 | ||
89 | cardList_.append(v); | 92 | cardList_.append(v); |
90 | 93 | ||
91 | v->parse(); | 94 | v->parse(); |
92 | 95 | ||
93 | s.remove(0, i); | 96 | s.remove(0, i); |
@@ -100,3 +103,3 @@ VCardEntity::_assemble() | |||
100 | VCardListIterator it(cardList_); | 103 | VCardListIterator it(cardList_); |
101 | 104 | ||
102 | for (; it.current(); ++it) | 105 | for (; it.current(); ++it) |
diff --git a/kabc/vcard/VCardv.cpp b/kabc/vcard/VCardv.cpp index 8d271f4..3f0a5e5 100644 --- a/kabc/vcard/VCardv.cpp +++ b/kabc/vcard/VCardv.cpp | |||
@@ -38,2 +38,3 @@ VCard::VCard() | |||
38 | { | 38 | { |
39 | contentLineList_.setAutoDelete( TRUE ); | ||
39 | } | 40 | } |
@@ -42,5 +43,14 @@ VCard::VCard(const VCard & x) | |||
42 | :Entity(x), | 43 | :Entity(x), |
43 | group_(x.group_), | 44 | group_(x.group_) |
44 | contentLineList_(x.contentLineList_) | ||
45 | { | 45 | { |
46 | contentLineList_.setAutoDelete( TRUE ); | ||
47 | //US | ||
48 | qDebug("VCard::VCard"); | ||
49 | |||
50 | QPtrListIterator<ContentLine> it(x.contentLineList_); | ||
51 | for (; it.current(); ++it) { | ||
52 | ContentLine * c = new ContentLine(*it.current()); | ||
53 | contentLineList_.append(c); | ||
54 | } | ||
55 | |||
46 | } | 56 | } |
@@ -50,2 +60,3 @@ VCard::VCard(const QCString & s) | |||
50 | { | 60 | { |
61 | contentLineList_.setAutoDelete( TRUE ); | ||
51 | } | 62 | } |
@@ -55,2 +66,4 @@ VCard::operator = (VCard & x) | |||
55 | { | 66 | { |
67 | //US | ||
68 | qDebug("VCard::operator ="); | ||
56 | if (*this == x) return *this; | 69 | if (*this == x) return *this; |
@@ -58,3 +71,7 @@ VCard::operator = (VCard & x) | |||
58 | group_ = x.group(); | 71 | group_ = x.group(); |
59 | contentLineList_= x.contentLineList_; | 72 | QPtrListIterator<ContentLine> it(x.contentLineList_); |
73 | for (; it.current(); ++it) { | ||
74 | ContentLine * c = new ContentLine(*it.current()); | ||
75 | contentLineList_.append(c); | ||
76 | } | ||
60 | 77 | ||