[prev in list] [next in list] [prev in thread] [next in thread]
List: kmail-devel
Subject: [Bug 96498] Cancelling entering password for secured mails causes
From: Stephan Kulow <coolo () kde ! org>
Date: 2007-03-21 15:56:44
Message-ID: 20070321155644.15181.qmail () ktown ! kde ! org
[Download RAW message or body]
------- You are receiving this mail because: -------
You are the assignee for the bug, or are watching the assignee.
http://bugs.kde.org/show_bug.cgi?id=96498
coolo kde org changed:
What |Removed |Added
----------------------------------------------------------------------------
Status|NEW |RESOLVED
Resolution| |FIXED
------- Additional Comments From coolo kde org 2007-03-21 16:56 -------
SVN commit 645047 by coolo:
another one of my most hated kmail crashes: if you cancel
gpg passphrase, kmail will crash in most cases you was careless.
After some fiddling I didn't find a better solution to this
problem than adding a direct protection member to the message.
BUG: 96498
M +12 -0 kmheaders.cpp
M +2 -0 kmmessage.cpp
M +7 -0 kmmessage.h
M +10 -1 kmreaderwin.cpp
--- branches/KDE/3.5/kdepim/kmail/kmheaders.cpp #645046:645047
@ -1731,6 +1731,9 @
void KMHeaders::selectNextMessage()
{
+ KMMessage *cm = currentMsg();
+ if ( cm && cm->isBeingParsed() )
+ return;
QListViewItem *lvi = currentItem();
if( lvi ) {
QListViewItem *below = lvi->itemBelow();
@ -1765,6 +1768,9 @
void KMHeaders::selectPrevMessage()
{
+ KMMessage *cm = currentMsg();
+ if ( cm && cm->isBeingParsed() )
+ return;
QListViewItem *lvi = currentItem();
if( lvi ) {
QListViewItem *above = lvi->itemAbove();
@ -1788,6 +1794,9 @
void KMHeaders::incCurrentMessage()
{
+ KMMessage *cm = currentMsg();
+ if ( cm && cm->isBeingParsed() )
+ return;
QListViewItem *lvi = currentItem();
if ( lvi && lvi->itemBelow() ) {
@ -1803,6 +1812,9 @
void KMHeaders::decCurrentMessage()
{
+ KMMessage *cm = currentMsg();
+ if ( cm && cm->isBeingParsed() )
+ return;
QListViewItem *lvi = currentItem();
if ( lvi && lvi->itemAbove() ) {
disconnect(this,SIGNAL(currentChanged(QListViewItem*)),
--- branches/KDE/3.5/kdepim/kmail/kmmessage.cpp #645046:645047
@ -152,6 +152,7 @
mUnencryptedMsg = 0;
mLastUpdated = 0;
mCursorPos = 0;
+ mIsParsed = false;
}
void KMMessage::assign( const KMMessage& other )
@ -174,6 +175,7 @
mEncryptionState = other.mEncryptionState;
mSignatureState = other.mSignatureState;
mMDNSentState = other.mMDNSentState;
+ mIsParsed = other.mIsParsed;
mDate = other.mDate;
if( other.hasUnencryptedMsg() )
mUnencryptedMsg = new KMMessage( *other.unencryptedMsg() );
--- branches/KDE/3.5/kdepim/kmail/kmmessage.h #645046:645047
@ -855,6 +855,12 @
/** Set cursor position as offset from message start */
void setCursorPos(int pos) { mCursorPos = pos; };
+ /* This is set in kmreaderwin if a message is being parsed to avoid
+ other parts of kmail (e.g. kmheaders) destroying the message.
+ Parsing can take longer and can be async (in case of gpg mails) */
+ bool isBeingParsed() const { return mIsParsed; }
+ void setIsBeingParsed( bool t ) { mIsParsed = t; }
+
private:
/** Initialization shared by the ctors. */
@ -869,6 +875,7 @
bool mDecodeHTML :1;
bool mReadyToShow :1;
bool mComplete :1;
+ bool mIsParsed : 1;
static const KMail::HeaderStrategy * sHeaderStrategy;
static QString sForwardStr;
const QTextCodec * mOverrideCodec;
--- branches/KDE/3.5/kdepim/kmail/kmreaderwin.cpp #645046:645047
@ -1504,7 +1504,14 @
assert(aMsg!=0);
- delete mRootNode;
+ aMsg->setIsBeingParsed( true );
+
+ if ( mRootNode && !mRootNode->processed() )
+ {
+ kdWarning() << "The root node is not yet processed! Danger!\n";
+ return;
+ } else
+ delete mRootNode;
mRootNode = partNode::fromMessage( aMsg );
const QCString mainCntTypeStr = mRootNode->typeString() + '/' + mRootNode->subTypeString();
@ -1642,6 +1649,8 @
showHideMimeTree( rootNodeCntType == DwMime::kTypeText &&
rootNodeCntSubtype == DwMime::kSubtypePlain );
}
+
+ aMsg->setIsBeingParsed( false );
}
_______________________________________________
KMail developers mailing list
KMail-devel@kde.org
https://mail.kde.org/mailman/listinfo/kmail-devel
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic