aboutsummaryrefslogtreecommitdiffstats
path: root/tests/net/imap/IMAPParserTest.cpp
diff options
context:
space:
mode:
authorvincent-richard <[email protected]>2021-02-05 17:28:20 +0000
committervincent-richard <[email protected]>2021-02-05 17:28:20 +0000
commit47c6f35f5afe9d6c05cc4a9fab4a0b8c5222b3b8 (patch)
treef51ea86f43e3163b8187fd385647f1443981d6b9 /tests/net/imap/IMAPParserTest.cpp
parentMerge pull request #249 from mpietruschka/master (diff)
downloadvmime-47c6f35f5afe9d6c05cc4a9fab4a0b8c5222b3b8.tar.gz
vmime-47c6f35f5afe9d6c05cc4a9fab4a0b8c5222b3b8.zip
#250 Fixed unquoted mailbox name
Diffstat (limited to 'tests/net/imap/IMAPParserTest.cpp')
-rw-r--r--tests/net/imap/IMAPParserTest.cpp56
1 files changed, 56 insertions, 0 deletions
diff --git a/tests/net/imap/IMAPParserTest.cpp b/tests/net/imap/IMAPParserTest.cpp
index 60ce16d7..387e4c66 100644
--- a/tests/net/imap/IMAPParserTest.cpp
+++ b/tests/net/imap/IMAPParserTest.cpp
@@ -38,6 +38,7 @@ VMIME_TEST_SUITE_BEGIN(IMAPParserTest)
VMIME_TEST(testFETCHBodyStructure_empty_body_fld_param_instead_of_NIL)
VMIME_TEST(testPipelining)
VMIME_TEST(testStarFlagWithoutBackslash)
+ VMIME_TEST(testUnquotedMailboxName)
VMIME_TEST_LIST_END
@@ -371,4 +372,59 @@ VMIME_TEST_SUITE_BEGIN(IMAPParserTest)
}
}
+ // Some broken IMAP servers return unquoted strings for mailbox names
+ void testUnquotedMailboxName() {
+
+ const char* respText =
+ R"END(* LIST (\HasNoChildren \UnMarked) "/" [Gmail]/Starred)END"
+ "\r\n"
+ R"END(a001 OK Completed.)END"
+ "\r\n";
+
+ // Strict mode
+ {
+ auto socket = vmime::make_shared <testSocket>();
+ auto toh = vmime::make_shared <testTimeoutHandler>();
+
+ auto tag = vmime::make_shared <vmime::net::imap::IMAPTag>();
+
+ socket->localSend(respText);
+
+ auto parser = vmime::make_shared <vmime::net::imap::IMAPParser>();
+
+ parser->setSocket(socket);
+ parser->setTimeoutHandler(toh);
+ parser->setStrict(true);
+
+ VASSERT_THROW("strict mode", parser->readResponse(*tag), vmime::exceptions::invalid_response);
+ }
+
+ // Non-strict mode
+ {
+ auto socket = vmime::make_shared <testSocket>();
+ auto toh = vmime::make_shared <testTimeoutHandler>();
+
+ auto tag = vmime::make_shared <vmime::net::imap::IMAPTag>();
+
+ socket->localSend(respText);
+
+ auto parser = vmime::make_shared <vmime::net::imap::IMAPParser>();
+
+ parser->setSocket(socket);
+ parser->setTimeoutHandler(toh);
+ parser->setStrict(false);
+
+ std::unique_ptr <vmime::net::imap::IMAPParser::response> resp;
+
+ VASSERT_NO_THROW("non-strict mode", resp.reset(parser->readResponse(*tag)));
+
+ VASSERT_EQ("resp size", 1, resp->continue_req_or_response_data.size());
+ VASSERT("resp data", resp->continue_req_or_response_data[0]->response_data);
+ VASSERT("mbox data", resp->continue_req_or_response_data[0]->response_data->mailbox_data);
+ VASSERT("mbox list", resp->continue_req_or_response_data[0]->response_data->mailbox_data->mailbox_list);
+ VASSERT("mbox", resp->continue_req_or_response_data[0]->response_data->mailbox_data->mailbox_list->mailbox);
+ VASSERT_EQ("mbox name", "[Gmail]/Starred", resp->continue_req_or_response_data[0]->response_data->mailbox_data->mailbox_list->mailbox->name);
+ }
+ }
+
VMIME_TEST_SUITE_END