Merge pull request #262 from ibanic/master

Prevent accessing empty buffer when using FilteredOutputStream with ICU
This commit is contained in:
Vincent Richard 2021-05-16 18:43:14 +02:00 committed by GitHub
commit edcb4b4b1f
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 33 additions and 0 deletions

View File

@ -433,6 +433,9 @@ 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 +523,9 @@ 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