From ec243adffd3c34df0b7f815bdaa691d1b3a4bfa7 Mon Sep 17 00:00:00 2001 From: Andreas Gungl Date: Wed, 12 Oct 2005 07:30:29 +0000 Subject: [PATCH] Fix QString::at(0) on possibly empty headers by checking the size. There is some more refactoring needed though - but let's do one step after another. svn path=/trunk/KDE/kdepim/; revision=469804 --- kmacctlocal.cpp | 11 ++++------- kmacctmaildir.cpp | 8 +++++--- kmmessage.cpp | 9 ++++++--- 3 files changed, 15 insertions(+), 13 deletions(-) diff --git a/kmacctlocal.cpp b/kmacctlocal.cpp index cd2862231..82c8a4934 100644 --- a/kmacctlocal.cpp +++ b/kmacctlocal.cpp @@ -223,13 +223,10 @@ bool KMAcctLocal::fetchMsg() #endif msg->setStatus( msg->headerField( "Status" ).latin1(), msg->headerField( "X-Status" ).latin1()); - // FIXME Empty headers give a QString with size == 0 which results in an assertion - // in QString::at() because of Q_ASSERT(i >= 0 && i < size()) although - // size == 0 should return '\0' as described in QString::size() documentation - // If it's no bug in qt-copy, then we have to check for the size ourself. - // At least, commenting the next two lines lets you receive mail from a local acocunt! - //msg->setEncryptionStateChar( msg->headerField( "X-KMail-EncryptionState" ).at(0) ); - //msg->setSignatureStateChar( msg->headerField( "X-KMail-SignatureState" ).at(0)); + if ( msg->headerField( "X-KMail-EncryptionState" ).size() ) + msg->setEncryptionStateChar( msg->headerField( "X-KMail-EncryptionState" ).at(0) ); + if ( msg->headerField( "X-KMail-SignatureState" ).size() ) + msg->setSignatureStateChar( msg->headerField( "X-KMail-SignatureState" ).at(0)); msg->setComplete(true); msg->updateAttachmentState(); diff --git a/kmacctmaildir.cpp b/kmacctmaildir.cpp index def853f5b..c805a6219 100644 --- a/kmacctmaildir.cpp +++ b/kmacctmaildir.cpp @@ -168,9 +168,11 @@ void KMAcctMaildir::processNewMail(bool) if (msg) { msg->setStatus(msg->headerField("Status").latin1(), - msg->headerField("X-Status").latin1()); - msg->setEncryptionStateChar( msg->headerField( "X-KMail-EncryptionState" ).at(0)); - msg->setSignatureStateChar( msg->headerField( "X-KMail-SignatureState" ).at(0)); + msg->headerField("X-Status").latin1()); + if ( msg->headerField( "X-KMail-EncryptionState" ).size() ) + msg->setEncryptionStateChar( msg->headerField( "X-KMail-EncryptionState" ).at(0) ); + if ( msg->headerField( "X-KMail-SignatureState" ).size() ) + msg->setSignatureStateChar( msg->headerField( "X-KMail-SignatureState" ).at(0)); addedOk = processNewMsg(msg); if (addedOk) diff --git a/kmmessage.cpp b/kmmessage.cpp index 156d18d35..4448fd47d 100644 --- a/kmmessage.cpp +++ b/kmmessage.cpp @@ -405,9 +405,12 @@ void KMMessage::fromDwString(const DwString& str, bool aSetStatus) if (aSetStatus) { setStatus(headerField("Status").latin1(), headerField("X-Status").latin1()); - setEncryptionStateChar( headerField("X-KMail-EncryptionState").at(0) ); - setSignatureStateChar( headerField("X-KMail-SignatureState").at(0) ); - setMDNSentState( static_cast( headerField("X-KMail-MDN-Sent").at(0).latin1() ) ); + if ( headerField( "X-KMail-EncryptionState" ).size() ) + setEncryptionStateChar( headerField( "X-KMail-EncryptionState" ).at(0) ); + if ( headerField( "X-KMail-SignatureState" ).size() ) + setSignatureStateChar( headerField( "X-KMail-SignatureState" ).at(0)); + if ( headerField("X-KMail-MDN-Sent").size() ) + setMDNSentState( static_cast( headerField("X-KMail-MDN-Sent").at(0).latin1() ) ); } if (attachmentState() == KMMsgAttachmentUnknown && readyToShow()) updateAttachmentState();