From 67a39fd9729e9fec295d3ee26fc228c6e5d3cf97 Mon Sep 17 00:00:00 2001 From: Vincent Richard Date: Sun, 15 Jan 2006 11:34:21 +0000 Subject: [PATCH] Fixed bug when reading CAPABILITY/LIST responses. --- src/net/imap/IMAPConnection.cpp | 43 ++++++++++++++++++--------------- 1 file changed, 23 insertions(+), 20 deletions(-) diff --git a/src/net/imap/IMAPConnection.cpp b/src/net/imap/IMAPConnection.cpp index 34888dae..76c09316 100644 --- a/src/net/imap/IMAPConnection.cpp +++ b/src/net/imap/IMAPConnection.cpp @@ -485,6 +485,9 @@ const std::vector IMAPConnection::getCapabilities() const IMAPParser::capability_data* capaData = respDataList[i]->response_data()->capability_data(); + if (capaData == NULL) + continue; + std::vector caps = capaData->capabilities(); for (unsigned int j = 0 ; j < caps.size() ; ++j) @@ -555,29 +558,29 @@ void IMAPConnection::initHierarchySeparator() const std::vector & respDataList = resp->continue_req_or_response_data(); - if (respDataList.size() < 1 || respDataList[0]->response_data() == NULL) + bool found = false; + + for (unsigned int i = 0 ; !found && i < respDataList.size() ; ++i) { - internalDisconnect(); - throw exceptions::command_error("LIST", m_parser->lastLine(), "unexpected response"); + if (respDataList[i]->response_data() == NULL) + continue; + + const IMAPParser::mailbox_data* mailboxData = + static_cast + (respDataList[i]->response_data())->mailbox_data(); + + if (mailboxData == NULL || mailboxData->type() != IMAPParser::mailbox_data::LIST) + continue; + + if (mailboxData->mailbox_list()->quoted_char() != '\0') + { + m_hierarchySeparator = mailboxData->mailbox_list()->quoted_char(); + found = true; + } } - const IMAPParser::mailbox_data* mailboxData = - static_cast (respDataList[0]->response_data())-> - mailbox_data(); - - if (mailboxData == NULL || mailboxData->type() != IMAPParser::mailbox_data::LIST) - { - internalDisconnect(); - throw exceptions::command_error("LIST", m_parser->lastLine(), "invalid type"); - } - - if (mailboxData->mailbox_list()->quoted_char() == '\0') - { - internalDisconnect(); - throw exceptions::command_error("LIST", m_parser->lastLine(), "no hierarchy separator"); - } - - m_hierarchySeparator = mailboxData->mailbox_list()->quoted_char(); + if (!found) // default + m_hierarchySeparator = '/'; }