[prev in list] [next in list] [prev in thread] [next in thread]
List: kde-commits
Subject: [trojita] /: IMAP: prevent a possible assert crash on invalid ESEARCH responses
From: Jan_Kundrát <jkt () flaska ! net>
Date: 2012-12-28 15:58:49
Message-ID: 20121228155849.102B7A6091 () git ! kde ! org
[Download RAW message or body]
Git commit e67e14230c6619a1d86aa3b81ca334f49ad5ae7e by Jan Kundrát.
Committed on 28/12/2012 at 16:06.
Pushed by jkt into branch 'master'.
IMAP: prevent a possible assert crash on invalid ESEARCH responses
M +1 -2 src/Imap/Tasks/ObtainSynchronizedMailboxTask.cpp
M +13 -0 tests/tests/test_Imap_Tasks_ObtainSynchronizedMailbox/test_Imap_Tasks_ObtainSynchronizedMailbox.cpp
M +1 -0 tests/tests/test_Imap_Tasks_ObtainSynchronizedMailbox/test_Imap_Tasks_ObtainSynchronizedMailbox.h
http://commits.kde.org/trojita/e67e14230c6619a1d86aa3b81ca334f49ad5ae7e
diff --git a/src/Imap/Tasks/ObtainSynchronizedMailboxTask.cpp \
b/src/Imap/Tasks/ObtainSynchronizedMailboxTask.cpp index 48d9b52..77d4e99 100644
--- a/src/Imap/Tasks/ObtainSynchronizedMailboxTask.cpp
+++ b/src/Imap/Tasks/ObtainSynchronizedMailboxTask.cpp
@@ -911,8 +911,7 @@ bool ObtainSynchronizedMailboxTask::handleESearch(const \
Imap::Responses::ESearch
TreeItemMsgList *list = dynamic_cast<TreeItemMsgList*>(mailbox->m_children[0]);
Q_ASSERT(list);
-
- if (resp->tag != uidSyncingCmd)
+ if (resp->tag.isEmpty() || resp->tag != uidSyncingCmd)
return false;
if (resp->seqOrUids != Imap::Responses::ESearch::UIDS)
diff --git a/tests/tests/test_Imap_Tasks_ObtainSynchronizedMailbox/test_Imap_Tasks_ObtainSynchronizedMailbox.cpp \
b/tests/tests/test_Imap_Tasks_ObtainSynchronizedMailbox/test_Imap_Tasks_ObtainSynchronizedMailbox.cpp
index 128959c..3cd2ec7 100644
--- a/tests/tests/test_Imap_Tasks_ObtainSynchronizedMailbox/test_Imap_Tasks_ObtainSynchronizedMailbox.cpp
+++ b/tests/tests/test_Imap_Tasks_ObtainSynchronizedMailbox/test_Imap_Tasks_ObtainSynchronizedMailbox.cpp
@@ -2028,4 +2028,17 @@ void \
ImapModelObtainSynchronizedMailboxTest::testSpuriousSearch() }
}
+/** @short Test how unexpected ESEARCH operates */
+void ImapModelObtainSynchronizedMailboxTest::testSpuriousESearch()
+{
+ QCOMPARE(model->rowCount(msgListA), 0);
+ cClient(t.mk("SELECT a\r\n"));
+ cServer(QByteArray("* 0 exists\r\n"));
+
+ {
+ ExpectSingleErrorHere blocker(this);
+ cServer("* ESEARCH (TAG \"\") UID \r\n");
+ }
+}
+
TROJITA_HEADLESS_TEST( ImapModelObtainSynchronizedMailboxTest )
diff --git a/tests/tests/test_Imap_Tasks_ObtainSynchronizedMailbox/test_Imap_Tasks_ObtainSynchronizedMailbox.h \
b/tests/tests/test_Imap_Tasks_ObtainSynchronizedMailbox/test_Imap_Tasks_ObtainSynchronizedMailbox.h
index a58ab88..9198efa 100644
--- a/tests/tests/test_Imap_Tasks_ObtainSynchronizedMailbox/test_Imap_Tasks_ObtainSynchronizedMailbox.h
+++ b/tests/tests/test_Imap_Tasks_ObtainSynchronizedMailbox/test_Imap_Tasks_ObtainSynchronizedMailbox.h
@@ -83,6 +83,7 @@ private slots:
void testQresyncArrived();
void testSpuriousSearch();
+ void testSpuriousESearch();
// We put the benchmark to the last position as this one takes a long time
void testFlagReSyncBenchmark();
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic