diff options
-rw-r--r-- | src/vmime/charsetConverter_icu.cpp | 4 | ||||
-rw-r--r-- | tests/parser/charsetTest.cpp | 27 |
2 files changed, 31 insertions, 0 deletions
diff --git a/src/vmime/charsetConverter_icu.cpp b/src/vmime/charsetConverter_icu.cpp index 56394797..faae7d32 100644 --- a/src/vmime/charsetConverter_icu.cpp +++ b/src/vmime/charsetConverter_icu.cpp @@ -433,6 +433,8 @@ void charsetFilteredOutputStream_icu::writeImpl( } const size_t uniLength = uniTarget - &uniBuffer[0]; + if(uniLength == 0) + continue; // Allocate buffer for destination charset const size_t cpSize = ucnv_getMinCharSize(m_to) * uniLength; @@ -520,6 +522,8 @@ void charsetFilteredOutputStream_icu::flush() { } const size_t uniLength = uniTarget - &uniBuffer[0]; + if(uniLength == 0) + continue; // Allocate buffer for destination charset const size_t cpSize = ucnv_getMinCharSize(m_to) * uniLength; diff --git a/tests/parser/charsetTest.cpp b/tests/parser/charsetTest.cpp index e44bef5b..01b04e11 100644 --- a/tests/parser/charsetTest.cpp +++ b/tests/parser/charsetTest.cpp @@ -34,6 +34,7 @@ VMIME_TEST_SUITE_BEGIN(charsetTest) // Test valid input VMIME_TEST(testConvertStringValid) VMIME_TEST(testConvertStreamValid) + VMIME_TEST(testConvertStreamExtract) VMIME_TEST(testEncodingHebrew1255) // IDNA @@ -104,6 +105,32 @@ VMIME_TEST_SUITE_BEGIN(charsetTest) } } + void testConvertStreamExtract() { + vmime::bodyPart p; + p.getBody()->setContents( + vmime::make_shared <vmime::stringContentHandler>( + "Foo éé\r\né bar\r\nbaz" + ), + vmime::mediaType("text", "plain"), + vmime::charset("utf-8"), + vmime::encoding("quoted-printable") + ); + + vmime::string str; + vmime::utility::outputStreamStringAdapter outStr(str); + vmime::shared_ptr <vmime::charsetConverter> conv = vmime::charsetConverter::create(p.getBody()->getCharset(), vmime::charset("US-ASCII")); + auto filteredStream = conv->getFilteredOutputStream(outStr); + p.getBody()->getContents()->extract(*filteredStream); + filteredStream->flush(); + VASSERT_EQ( + "generate", + "Foo ??\r\n" + "? bar\r\n" + "baz", + str + ); + } + void testEncodingHebrew1255() { // hewbrew string in windows-1255 charset |