Don't crash when an imapjob is executed on an empty list and don't leak imapjobs.

Remove trailling whitespace.

svn path=/trunk/kdepim/; revision=295073
wilder-work
Till Adam 22 years ago
parent 6cc240a25b
commit 6fa0fca6f8
  1. 34
      imapjob.cpp

@ -72,11 +72,17 @@ void ImapJob::init( JobType jt, QString sets, KMFolderImap* folder,
if ( jt == tExpireMessages )
{
expireMessages();
deleteLater();
return;
}
assert(jt == tGetMessage || folder);
KMMessage* msg = msgList.first();
// guard against empty list
if ( !msg ) {
deleteLater();
return;
}
mType = jt;
mDestFolder = folder? folder->folder() : 0;
// refcount++
@ -97,7 +103,7 @@ void ImapJob::init( JobType jt, QString sets, KMFolderImap* folder,
KMAcctImap *account;
if (folder) {
account = folder->account();
} else {
} else {
account = static_cast<KMFolderImap*>(msg_parent->storage())->account();
}
if ( !account ||
@ -110,11 +116,11 @@ void ImapJob::init( JobType jt, QString sets, KMFolderImap* folder,
{
// transfers the complete message to the server
KURL url = account->getUrl();
QString flags = KMFolderImap::statusToFlags( msg->status() );
QString flags = KMFolderImap::statusToFlags( msg->status() );
url.setPath( folder->imapPath() + ";SECTION=" + flags );
ImapAccountBase::jobData jd;
jd.parent = 0; jd.offset = 0; jd.done = 0;
jd.total = msg->msgSizeServer();
jd.total = msg->msgSizeServer();
jd.msgList.append(msg);
QCString cstr( msg->asString() );
int a = cstr.find("\nX-UID: ");
@ -201,7 +207,7 @@ ImapJob::~ImapJob()
mit.current()->setTransferInProgress(false);
}
}
mDestFolder->close();
}
@ -221,7 +227,7 @@ ImapJob::~ImapJob()
}
}
}
mSrcFolder->close();
}
}
@ -256,13 +262,13 @@ void ImapJob::slotGetNextMessage()
path += ";SECTION=BODY.PEEK[" + mPartSpecifier + "]";
DwBodyPart * part = msg->findDwBodyPart( msg->getFirstDwBodyPart(), mPartSpecifier );
if (part)
jd.total = part->BodySize();
jd.total = part->BodySize();
}
} else {
path += ";SECTION=BODY.PEEK[]";
if (msg->msgSizeServer() > 0)
jd.total = msg->msgSizeServer();
}
if (msg->msgSizeServer() > 0)
jd.total = msg->msgSizeServer();
}
url.setPath( path );
// kdDebug(5006) << "ImapJob::slotGetNextMessage - retrieve " << url.path() << endl;
// protect the message, otherwise we'll get crashes afterwards
@ -325,7 +331,7 @@ void ImapJob::slotGetMessageResult( KIO::Job * job )
(*it).done = size;
ulong uid = msg->UID();
// must set this first so that msg->fromByteArray sets the attachment status
if ( mPartSpecifier.isEmpty() )
if ( mPartSpecifier.isEmpty() )
msg->setComplete( true );
else
msg->setReadyToShow( false );
@ -333,7 +339,7 @@ void ImapJob::slotGetMessageResult( KIO::Job * job )
msg->fromByteArray( (*it).data );
// reconstruct as it may be overwritten above
msg->setUID(uid);
if ( size > 0 && msg->msgSizeServer() == 0 )
if ( size > 0 && msg->msgSizeServer() == 0 )
msg->setMsgSizeServer(size);
} else {
@ -395,7 +401,7 @@ void ImapJob::slotGetBodyStructureResult( KIO::Job * job )
}
ImapAccountBase::JobIterator it = account->findJob( job );
if ( it == account->jobsEnd() ) return;
if (job->error())
{
@ -568,7 +574,7 @@ void ImapJob::slotCopyMessageResult( KIO::Job *job )
//-----------------------------------------------------------------------------
void ImapJob::execute()
{
init( mType, mSets, mDestFolder?
init( mType, mSets, mDestFolder?
dynamic_cast<KMFolderImap*>( mDestFolder->storage() ):0, mMsgList );
}
@ -603,7 +609,7 @@ void ImapJob::expireMessages()
}
mParentFolder->open();
QPtrList<KMMessage> list;
QPtrList<KMMessage> list;
for( i=mParentFolder->count()-1; i>=0; i-- ) {
mb = mParentFolder->getMsgBase(i);
if (mb == 0) {

Loading…
Cancel
Save