aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/net/imap/IMAPConnection.cpp37
1 files changed, 20 insertions, 17 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 <string> IMAPConnection::getCapabilities()
const IMAPParser::capability_data* capaData =
respDataList[i]->response_data()->capability_data();
+ if (capaData == NULL)
+ continue;
+
std::vector <IMAPParser::capability*> caps = capaData->capabilities();
for (unsigned int j = 0 ; j < caps.size() ; ++j)
@@ -555,29 +558,29 @@ void IMAPConnection::initHierarchySeparator()
const std::vector <IMAPParser::continue_req_or_response_data*>& 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 <const IMAPParser::response_data*>(respDataList[0]->response_data())->
- mailbox_data();
+ const IMAPParser::mailbox_data* mailboxData =
+ static_cast <const IMAPParser::response_data*>
+ (respDataList[i]->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 == NULL || mailboxData->type() != IMAPParser::mailbox_data::LIST)
+ continue;
- if (mailboxData->mailbox_list()->quoted_char() == '\0')
- {
- internalDisconnect();
- throw exceptions::command_error("LIST", m_parser->lastLine(), "no hierarchy separator");
+ if (mailboxData->mailbox_list()->quoted_char() != '\0')
+ {
+ m_hierarchySeparator = mailboxData->mailbox_list()->quoted_char();
+ found = true;
+ }
}
- m_hierarchySeparator = mailboxData->mailbox_list()->quoted_char();
+ if (!found) // default
+ m_hierarchySeparator = '/';
}