[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