From 4f9dc93200616f11db6935f439c47252de5674d3 Mon Sep 17 00:00:00 2001 From: Vincent Richard Date: Sun, 19 Jun 2011 18:49:55 +0000 Subject: [PATCH] Added support for mailboxes that specify an (encoded) full name with an empty email address, set by a <> marker (Zarafa). --- src/mailbox.cpp | 4 +++- tests/parser/mailboxTest.cpp | 15 +++++++++++++++ 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/src/mailbox.cpp b/src/mailbox.cpp index 5cb0139d..fea74797 100644 --- a/src/mailbox.cpp +++ b/src/mailbox.cpp @@ -88,6 +88,7 @@ void mailbox::parse(const string& buffer, const string::size_type position, // Temporary buffers for extracted name and address string name; string address; + bool hadBrackets = false; while (p < pend) { @@ -283,6 +284,7 @@ void mailbox::parse(const string& buffer, const string::size_type position, } else if (*p == '>') { + hadBrackets = true; break; } else if (!parserHelpers::isSpace(*p)) @@ -309,7 +311,7 @@ void mailbox::parse(const string& buffer, const string::size_type position, // Swap name and address when no address was found // (email address is mandatory, whereas name is optional). - if (address.empty() && !name.empty()) + if (address.empty() && !name.empty() && !hadBrackets) { m_email.clear(); m_email.reserve(name.size()); diff --git a/tests/parser/mailboxTest.cpp b/tests/parser/mailboxTest.cpp index 8411daa7..9ebadca6 100644 --- a/tests/parser/mailboxTest.cpp +++ b/tests/parser/mailboxTest.cpp @@ -32,6 +32,7 @@ VMIME_TEST_SUITE_BEGIN VMIME_TEST_LIST_BEGIN VMIME_TEST(testParse) + VMIME_TEST(testEmptyEmailAddress) VMIME_TEST_LIST_END @@ -113,5 +114,19 @@ VMIME_TEST_SUITE_BEGIN } } + void testEmptyEmailAddress() + { + vmime::addressList addrList; + addrList.parse("\"Full Name\" <>"); + + VASSERT_EQ("count", 1, addrList.getAddressCount()); + VASSERT_EQ("!group", false, addrList.getAddressAt(0)->isGroup()); + + vmime::ref mbox = addrList.getAddressAt(0).dynamicCast (); + + VASSERT_EQ("name", "Full Name", mbox->getName()); + VASSERT_EQ("email", "", mbox->getEmail()); + } + VMIME_TEST_SUITE_END