Prevent accessing empty buffer

This commit is contained in:
ibanic 2021-05-15 22:32:24 +02:00
parent c86e4bcd3a
commit 5d78d879bb
2 changed files with 31 additions and 0 deletions

View File

@ -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;

View File

@ -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