summaryrefslogtreecommitdiffabout
authorzautrix <zautrix>2004-09-01 19:41:57 (UTC)
committer zautrix <zautrix>2004-09-01 19:41:57 (UTC)
commitf255826bda2f95721aec4d6c9ba372d852fb9d0b (patch) (unidiff)
treedff43a1b3f933e91ffee864d20b7a6ded8bb1605
parent0cd2b8958ad93db27550b5e39d52e613b96b5e46 (diff)
downloadkdepimpi-f255826bda2f95721aec4d6c9ba372d852fb9d0b.zip
kdepimpi-f255826bda2f95721aec4d6c9ba372d852fb9d0b.tar.gz
kdepimpi-f255826bda2f95721aec4d6c9ba372d852fb9d0b.tar.bz2
Fixed a crash in mailwrapper
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--kmicromail/libmailwrapper/genericwrapper.cpp3
1 files changed, 1 insertions, 2 deletions
diff --git a/kmicromail/libmailwrapper/genericwrapper.cpp b/kmicromail/libmailwrapper/genericwrapper.cpp
index 1fd4bb1..9614d53 100644
--- a/kmicromail/libmailwrapper/genericwrapper.cpp
+++ b/kmicromail/libmailwrapper/genericwrapper.cpp
@@ -262,221 +262,220 @@ QString Genericwrapper::parseAddressList( mailimf_address_list *list )
262 if (list == 0) return result; 262 if (list == 0) return result;
263 for ( clistiter *current = clist_begin( list->ad_list ); current != NULL; current = current->next ) { 263 for ( clistiter *current = clist_begin( list->ad_list ); current != NULL; current = current->next ) {
264 mailimf_address *addr = (mailimf_address *) current->data; 264 mailimf_address *addr = (mailimf_address *) current->data;
265 265
266 if ( !first ) { 266 if ( !first ) {
267 result.append( "," ); 267 result.append( "," );
268 } else { 268 } else {
269 first = false; 269 first = false;
270 } 270 }
271 271
272 switch ( addr->ad_type ) { 272 switch ( addr->ad_type ) {
273 case MAILIMF_ADDRESS_MAILBOX: 273 case MAILIMF_ADDRESS_MAILBOX:
274 result.append( parseMailbox( addr->ad_data.ad_mailbox ) ); 274 result.append( parseMailbox( addr->ad_data.ad_mailbox ) );
275 break; 275 break;
276 case MAILIMF_ADDRESS_GROUP: 276 case MAILIMF_ADDRESS_GROUP:
277 result.append( parseGroup( addr->ad_data.ad_group ) ); 277 result.append( parseGroup( addr->ad_data.ad_group ) );
278 break; 278 break;
279 default: 279 default:
280 ; // odebug << "Generic: unkown mailimf address type" << oendl; 280 ; // odebug << "Generic: unkown mailimf address type" << oendl;
281 break; 281 break;
282 } 282 }
283 } 283 }
284 284
285 return result; 285 return result;
286} 286}
287 287
288QString Genericwrapper::parseGroup( mailimf_group *group ) 288QString Genericwrapper::parseGroup( mailimf_group *group )
289{ 289{
290 QString result( "" ); 290 QString result( "" );
291 291
292 result.append( group->grp_display_name ); 292 result.append( group->grp_display_name );
293 result.append( ": " ); 293 result.append( ": " );
294 294
295 if ( group->grp_mb_list != NULL ) { 295 if ( group->grp_mb_list != NULL ) {
296 result.append( parseMailboxList( group->grp_mb_list ) ); 296 result.append( parseMailboxList( group->grp_mb_list ) );
297 } 297 }
298 298
299 result.append( ";" ); 299 result.append( ";" );
300 300
301 return result; 301 return result;
302} 302}
303 303
304QString Genericwrapper::parseMailbox( mailimf_mailbox *box ) 304QString Genericwrapper::parseMailbox( mailimf_mailbox *box )
305{ 305{
306 QString result( "" ); 306 QString result( "" );
307 307
308 if ( box->mb_display_name == NULL ) { 308 if ( box->mb_display_name == NULL ) {
309 result.append( box->mb_addr_spec ); 309 result.append( box->mb_addr_spec );
310 } else { 310 } else {
311 result.append( convert_String(box->mb_display_name).latin1() ); 311 result.append( convert_String(box->mb_display_name).latin1() );
312 result.append( " <" ); 312 result.append( " <" );
313 result.append( box->mb_addr_spec ); 313 result.append( box->mb_addr_spec );
314 result.append( ">" ); 314 result.append( ">" );
315 } 315 }
316 316
317 return result; 317 return result;
318} 318}
319 319
320QString Genericwrapper::parseMailboxList( mailimf_mailbox_list *list ) 320QString Genericwrapper::parseMailboxList( mailimf_mailbox_list *list )
321{ 321{
322 QString result( "" ); 322 QString result( "" );
323 323
324 bool first = true; 324 bool first = true;
325 for ( clistiter *current = clist_begin( list->mb_list ); current != NULL; current = current->next ) { 325 for ( clistiter *current = clist_begin( list->mb_list ); current != NULL; current = current->next ) {
326 mailimf_mailbox *box = (mailimf_mailbox *) current->data; 326 mailimf_mailbox *box = (mailimf_mailbox *) current->data;
327 327
328 if ( !first ) { 328 if ( !first ) {
329 result.append( "," ); 329 result.append( "," );
330 } else { 330 } else {
331 first = false; 331 first = false;
332 } 332 }
333 333
334 result.append( parseMailbox( box ) ); 334 result.append( parseMailbox( box ) );
335 } 335 }
336 336
337 return result; 337 return result;
338} 338}
339 339
340encodedString* Genericwrapper::fetchDecodedPart(const RecMailP&,const RecPartP&part) 340encodedString* Genericwrapper::fetchDecodedPart(const RecMailP&,const RecPartP&part)
341{ 341{
342 QMap<QString,encodedString*>::ConstIterator it = bodyCache.find(part->Identifier()); 342 QMap<QString,encodedString*>::ConstIterator it = bodyCache.find(part->Identifier());
343 if (it==bodyCache.end()) return new encodedString(); 343 if (it==bodyCache.end()) return new encodedString();
344 encodedString*t = decode_String(it.data(),part->Encoding()); 344 encodedString*t = decode_String(it.data(),part->Encoding());
345 return t; 345 return t;
346} 346}
347 347
348encodedString* Genericwrapper::fetchRawPart(const RecMailP&,const RecPartP&part) 348encodedString* Genericwrapper::fetchRawPart(const RecMailP&,const RecPartP&part)
349{ 349{
350 QMap<QString,encodedString*>::ConstIterator it = bodyCache.find(part->Identifier()); 350 QMap<QString,encodedString*>::ConstIterator it = bodyCache.find(part->Identifier());
351 if (it==bodyCache.end()) return new encodedString(); 351 if (it==bodyCache.end()) return new encodedString();
352 encodedString*t = it.data(); 352 encodedString*t = it.data();
353 return t; 353 return t;
354} 354}
355 355
356QString Genericwrapper::fetchTextPart(const RecMailP&mail,const RecPartP&part) 356QString Genericwrapper::fetchTextPart(const RecMailP&mail,const RecPartP&part)
357{ 357{
358 encodedString*t = fetchDecodedPart(mail,part); 358 encodedString*t = fetchDecodedPart(mail,part);
359 QString text=t->Content(); 359 QString text=t->Content();
360 delete t; 360 delete t;
361 return text; 361 return text;
362} 362}
363 363
364void Genericwrapper::cleanMimeCache() 364void Genericwrapper::cleanMimeCache()
365{ 365{
366 QMap<QString,encodedString*>::Iterator it = bodyCache.begin(); 366 QMap<QString,encodedString*>::Iterator it = bodyCache.begin();
367 for (;it!=bodyCache.end();++it) { 367 for (;it!=bodyCache.end();++it) {
368 encodedString*t = it.data(); 368 encodedString*t = it.data();
369 //it.setValue(0); 369 //it.setValue(0);
370 if (t) delete t; 370 if (t) delete t;
371 } 371 }
372 bodyCache.clear(); 372 bodyCache.clear();
373 ; // odebug << "Genericwrapper: cache cleaned" << oendl; 373 ; // odebug << "Genericwrapper: cache cleaned" << oendl;
374} 374}
375 375
376QStringList Genericwrapper::parseInreplies(mailimf_in_reply_to * in_replies) 376QStringList Genericwrapper::parseInreplies(mailimf_in_reply_to * in_replies)
377{ 377{
378 QStringList res; 378 QStringList res;
379 if (!in_replies || !in_replies->mid_list) return res; 379 if (!in_replies || !in_replies->mid_list) return res;
380 clistiter * current = 0; 380 clistiter * current = 0;
381 for ( current = clist_begin( in_replies->mid_list ); current != NULL; current = current->next ) { 381 for ( current = clist_begin( in_replies->mid_list ); current != NULL; current = current->next ) {
382 QString h((char*)current->data); 382 QString h((char*)current->data);
383 while (h.length()>0 && h[0]=='<') { 383 while (h.length()>0 && h[0]=='<') {
384 h.remove(0,1); 384 h.remove(0,1);
385 } 385 }
386 while (h.length()>0 && h[h.length()-1]=='>') { 386 while (h.length()>0 && h[h.length()-1]=='>') {
387 h.remove(h.length()-1,1); 387 h.remove(h.length()-1,1);
388 } 388 }
389 if (h.length()>0) { 389 if (h.length()>0) {
390 res.append(h); 390 res.append(h);
391 } 391 }
392 } 392 }
393 return res; 393 return res;
394} 394}
395 395
396void Genericwrapper::parseList(QValueList<Opie::Core::OSmartPointer<RecMail> > &target,mailsession*session,const QString&mailbox,bool mbox_as_to, int maxSizeInKb) 396void Genericwrapper::parseList(QValueList<Opie::Core::OSmartPointer<RecMail> > &target,mailsession*session,const QString&mailbox,bool mbox_as_to, int maxSizeInKb)
397{ 397{
398 int r; 398 int r;
399 mailmessage_list * env_list = 0; 399 mailmessage_list * env_list = 0;
400 r = mailsession_get_messages_list(session,&env_list); 400 r = mailsession_get_messages_list(session,&env_list);
401 if (r != MAIL_NO_ERROR) { 401 if (r != MAIL_NO_ERROR) {
402 ; // odebug << "Error message list" << oendl; 402 ; // odebug << "Error message list" << oendl;
403 return; 403 return;
404 } 404 }
405 r = mailsession_get_envelopes_list(session, env_list); 405 r = mailsession_get_envelopes_list(session, env_list);
406 if (r != MAIL_NO_ERROR) { 406 if (r != MAIL_NO_ERROR) {
407 ; // odebug << "Error filling message list" << oendl; 407 ; // odebug << "Error filling message list" << oendl;
408 if (env_list) { 408 if (env_list) {
409 mailmessage_list_free(env_list); 409 mailmessage_list_free(env_list);
410 } 410 }
411 return; 411 return;
412 } 412 }
413 mailimf_references * refs = 0; 413 mailimf_references * refs = 0;
414 mailimf_in_reply_to * in_replies = 0; 414 mailimf_in_reply_to * in_replies = 0;
415 uint32_t i = 0; 415 uint32_t i = 0;
416 for(; i < carray_count(env_list->msg_tab) ; ++i) { 416 for(; i < carray_count(env_list->msg_tab) ; ++i) {
417 mailmessage * msg; 417 mailmessage * msg;
418 QBitArray mFlags(7); 418 QBitArray mFlags(7);
419 msg = (mailmessage*)carray_get(env_list->msg_tab, i); 419 msg = (mailmessage*)carray_get(env_list->msg_tab, i);
420 if (msg->msg_fields == NULL) { 420 if (msg->msg_fields == NULL) {
421 //; // odebug << "could not fetch envelope of message " << i << "" << oendl; 421 //; // odebug << "could not fetch envelope of message " << i << "" << oendl;
422 continue; 422 continue;
423 } 423 }
424 RecMailP mail = new RecMail(); 424 RecMailP mail = new RecMail();
425 mail->setWrapper(this); 425 mail->setWrapper(this);
426 mail_flags * flag_result = 0; 426 mail_flags * flag_result = 0;
427 r = mailmessage_get_flags(msg,&flag_result); 427 r = mailmessage_get_flags(msg,&flag_result);
428 if (r == MAIL_ERROR_NOT_IMPLEMENTED) { 428 if (r == MAIL_ERROR_NOT_IMPLEMENTED) {
429 mFlags.setBit(FLAG_SEEN); 429 mFlags.setBit(FLAG_SEEN);
430 } 430 }
431 mailimf_single_fields single_fields; 431 mailimf_single_fields single_fields;
432 mailimf_single_fields_init(&single_fields, msg->msg_fields); 432 mailimf_single_fields_init(&single_fields, msg->msg_fields);
433 mail->setMsgsize(msg->msg_size); 433 mail->setMsgsize(msg->msg_size);
434 mail->setFlags(mFlags); 434 mail->setFlags(mFlags);
435 mail->setMbox(mailbox); 435 mail->setMbox(mailbox);
436 mail->setNumber(msg->msg_index); 436 mail->setNumber(msg->msg_index);
437 if (single_fields.fld_subject) 437 if (single_fields.fld_subject)
438 mail->setSubject( convert_String(single_fields.fld_subject->sbj_value)); 438 mail->setSubject( convert_String(single_fields.fld_subject->sbj_value));
439 if (single_fields.fld_from) 439 if (single_fields.fld_from)
440 mail->setFrom(parseMailboxList(single_fields.fld_from->frm_mb_list)); 440 mail->setFrom(parseMailboxList(single_fields.fld_from->frm_mb_list));
441 if (!mbox_as_to) { 441 if (!mbox_as_to) {
442 if (single_fields.fld_to) 442 if (single_fields.fld_to)
443 mail->setTo( parseAddressList( single_fields.fld_to->to_addr_list ) ); 443 mail->setTo( parseAddressList( single_fields.fld_to->to_addr_list ) );
444 } else { 444 } else {
445 mail->setTo(mailbox); 445 mail->setTo(mailbox);
446 } 446 }
447 if (single_fields.fld_cc) 447 if (single_fields.fld_cc)
448 mail->setCC( parseAddressList( single_fields.fld_cc->cc_addr_list ) ); 448 mail->setCC( parseAddressList( single_fields.fld_cc->cc_addr_list ) );
449 if (single_fields.fld_bcc) 449 if (single_fields.fld_bcc)
450 mail->setBcc( parseAddressList( single_fields.fld_bcc->bcc_addr_list ) ); 450 mail->setBcc( parseAddressList( single_fields.fld_bcc->bcc_addr_list ) );
451 if (single_fields.fld_orig_date) 451 if (single_fields.fld_orig_date)
452 mail->setDate( parseDateTime( single_fields.fld_orig_date->dt_date_time ) ); 452 mail->setDate( parseDateTime( single_fields.fld_orig_date->dt_date_time ) );
453 // crashes when accessing pop3 account? 453 // crashes when accessing pop3 account?
454 if (single_fields.fld_message_id->mid_value) { 454 if (single_fields.fld_message_id) {
455 mail->setMsgid(QString(single_fields.fld_message_id->mid_value)); 455 mail->setMsgid(QString(single_fields.fld_message_id->mid_value));
456 ; // odebug << "Msgid == " << mail->Msgid().latin1() << "" << oendl; 456 ; // odebug << "Msgid == " << mail->Msgid().latin1() << "" << oendl;
457 } 457 }
458
459 if (single_fields.fld_reply_to) { 458 if (single_fields.fld_reply_to) {
460 QStringList t = parseAddressList(single_fields.fld_reply_to->rt_addr_list); 459 QStringList t = parseAddressList(single_fields.fld_reply_to->rt_addr_list);
461 if (t.count()>0) { 460 if (t.count()>0) {
462 mail->setReplyto(t[0]); 461 mail->setReplyto(t[0]);
463 } 462 }
464 } 463 }
465#if 0 464#if 0
466 refs = single_fields.fld_references; 465 refs = single_fields.fld_references;
467 if (refs && refs->mid_list && clist_count(refs->mid_list)) { 466 if (refs && refs->mid_list && clist_count(refs->mid_list)) {
468 char * text = (char*)refs->mid_list->first->data; 467 char * text = (char*)refs->mid_list->first->data;
469 mail->setReplyto(QString(text)); 468 mail->setReplyto(QString(text));
470 } 469 }
471#endif 470#endif
472 if (single_fields.fld_in_reply_to && single_fields.fld_in_reply_to->mid_list && 471 if (single_fields.fld_in_reply_to && single_fields.fld_in_reply_to->mid_list &&
473 clist_count(single_fields.fld_in_reply_to->mid_list)) { 472 clist_count(single_fields.fld_in_reply_to->mid_list)) {
474 mail->setInreply(parseInreplies(single_fields.fld_in_reply_to)); 473 mail->setInreply(parseInreplies(single_fields.fld_in_reply_to));
475 } 474 }
476 if ( maxSizeInKb == 0 || mail->Msgsize()<=maxSizeInKb*1024 ) 475 if ( maxSizeInKb == 0 || mail->Msgsize()<=maxSizeInKb*1024 )
477 target.append(mail); 476 target.append(mail);
478 } 477 }
479 if (env_list) { 478 if (env_list) {
480 mailmessage_list_free(env_list); 479 mailmessage_list_free(env_list);
481 } 480 }
482} 481}