diff options
author | Vincent Richard <[email protected]> | 2013-10-16 17:47:24 +0000 |
---|---|---|
committer | Vincent Richard <[email protected]> | 2013-10-16 17:47:24 +0000 |
commit | 29954e5e50e5668a5f38f944573b9be6401ed433 (patch) | |
tree | 5c79750d6cae628b11b0d5427f5a56367149061f | |
parent | Merge branch 'master' of https://github.com/kisli/vmime (diff) | |
download | vmime-29954e5e50e5668a5f38f944573b9be6401ed433.tar.gz vmime-29954e5e50e5668a5f38f944573b9be6401ed433.zip |
Fixed group parsing in mailboxList.
-rw-r--r-- | SConstruct | 1 | ||||
-rw-r--r-- | src/mailboxList.cpp | 32 | ||||
-rw-r--r-- | tests/parser/mailboxListTest.cpp | 48 |
3 files changed, 80 insertions, 1 deletions
@@ -386,6 +386,7 @@ libvmimetest_sources = [ 'tests/parser/headerFieldTest.cpp', 'tests/parser/htmlTextPartTest.cpp', 'tests/parser/mailboxGroupTest.cpp', + 'tests/parser/mailboxListTest.cpp', 'tests/parser/mailboxTest.cpp', 'tests/parser/mediaTypeTest.cpp', 'tests/parser/messageIdTest.cpp', diff --git a/src/mailboxList.cpp b/src/mailboxList.cpp index 03a225f8..f0f40ca8 100644 --- a/src/mailboxList.cpp +++ b/src/mailboxList.cpp @@ -22,6 +22,7 @@ // #include "vmime/mailboxList.hpp" +#include "vmime/mailboxGroup.hpp" #include "vmime/exception.hpp" @@ -200,7 +201,36 @@ void mailboxList::parseImpl (const parsingContext& ctx, const string& buffer, const string::size_type position, const string::size_type end, string::size_type* newPosition) { - m_list.parse(ctx, buffer, position, end, newPosition); + m_list.removeAllAddresses(); + + string::size_type pos = position; + + while (pos < end) + { + ref <address> parsedAddress = address::parseNext(ctx, buffer, pos, end, &pos, NULL); + + if (parsedAddress != NULL) + { + if (parsedAddress->isGroup()) + { + ref <mailboxGroup> group = parsedAddress.staticCast <mailboxGroup>(); + + for (size_t i = 0 ; i < group->getMailboxCount() ; ++i) + { + m_list.appendAddress(group->getMailboxAt(i)); + } + } + else + { + m_list.appendAddress(parsedAddress); + } + } + } + + setParsedBounds(position, end); + + if (newPosition) + *newPosition = end; } diff --git a/tests/parser/mailboxListTest.cpp b/tests/parser/mailboxListTest.cpp new file mode 100644 index 00000000..c921069e --- /dev/null +++ b/tests/parser/mailboxListTest.cpp @@ -0,0 +1,48 @@ +// +// VMime library (http://www.vmime.org) +// Copyright (C) 2002-2013 Vincent Richard <[email protected]> +// +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License as +// published by the Free Software Foundation; either version 3 of +// the License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// General Public License for more details. +// +// You should have received a copy of the GNU General Public License along +// with this program; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +// +// Linking this library statically or dynamically with other modules is making +// a combined work based on this library. Thus, the terms and conditions of +// the GNU General Public License cover the whole combination. +// + +#include "tests/testUtils.hpp" + + +VMIME_TEST_SUITE_BEGIN(mailboxListTest) + + VMIME_TEST_LIST_BEGIN + VMIME_TEST(testParseGroup) + VMIME_TEST_LIST_END + + + // Disposition-Notification-To:: <[email protected]> + void testParseGroup() + { + // Groups should be extracted to multiple mailboxes in mailbox lists + vmime::mailboxList mboxList; + + VASSERT_EQ("count", 3, mboxList.getMailboxCount()); + VASSERT_EQ("email", "[email protected]", mboxList.getMailboxAt(0)->getEmail().generate()); + VASSERT_EQ("email", "[email protected]", mboxList.getMailboxAt(1)->getEmail().generate()); + VASSERT_EQ("email", "[email protected]", mboxList.getMailboxAt(2)->getEmail().generate()); + } + +VMIME_TEST_SUITE_END + |