From 24df248b94a5cf773b5a2e99c83d4dd7e51978e2 Mon Sep 17 00:00:00 2001 From: Allen Winter Date: Sun, 12 Jul 2009 21:43:56 +0000 Subject: [PATCH] make KMSearchPattern::matches() more robust against crashes. might help fix CCBUG: 199862 svn path=/trunk/KDE/kdepim/; revision=995514 --- kmsearchpattern.cpp | 30 +++++++++++++++++------------- 1 file changed, 17 insertions(+), 13 deletions(-) diff --git a/kmsearchpattern.cpp b/kmsearchpattern.cpp index 0b9d5425a..5377a2ab2 100644 --- a/kmsearchpattern.cpp +++ b/kmsearchpattern.cpp @@ -783,27 +783,31 @@ bool KMSearchPattern::matches( quint32 serNum, bool ignoreBody ) const return true; } - bool res; + bool res = false; int idx = -1; KMFolder *folder = 0; KMMsgDict::instance()->getLocation( serNum, &folder, &idx ); if ( !folder || ( idx == -1 ) || ( idx >= folder->count() ) ) { - return false; + return res; } KMFolderOpener openFolder( folder, "searptr" ); - KMMsgBase *msgBase = folder->getMsgBase( idx ); - if (requiresBody() && !ignoreBody) { - bool unGet = !msgBase->isMessage(); - KMMessage *msg = folder->getMsg(idx); - res = false; - if ( msg ) { - res = matches( msg, ignoreBody ); - if (unGet) - folder->unGetMsg(idx); + if ( openFolder.openResult() == 0 ) { // 0 means no error codes + KMFolder *f = openFolder.folder(); + KMMsgBase *msgBase = f->getMsgBase( idx ); + if ( msgBase && requiresBody() && !ignoreBody ) { + bool unGet = !msgBase->isMessage(); + KMMessage *msg = f->getMsg( idx ); + res = false; + if ( msg ) { + res = matches( msg, ignoreBody ); + if ( unGet ) { + folder->unGetMsg( idx ); + } + } + } else { + res = matches( f->getDwString( idx ), ignoreBody ); } - } else { - res = matches( folder->getDwString(idx), ignoreBody ); } return res; }