vmime: avoid changing SEVEN_BIT when encoding::decideImpl sees U+007F (#303)

* vmime: avoid changing SEVEN_BIT when encoding::decideImpl sees U+007F

Do not switch to QP/B64 when encountering U+007F.
U+007F is part of ASCII just as much as U+0001 is.

---------

Co-authored-by: Vincent Richard <vincent@vincent-richard.net>
This commit is contained in:
Jan Engelhardt 2024-05-21 15:45:29 +02:00 committed by GitHub
parent 15f3b94580
commit 97d15b8cd7
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 12 additions and 1 deletions

View File

@ -157,7 +157,7 @@ const encoding encoding::decideImpl(
const string::difference_type length = end - begin;
const string::difference_type count = std::count_if(
begin, end, [](unsigned char x) { return x < 127; });
begin, end, [](unsigned char x) { return x <= 127; });
// All is in 7-bit US-ASCII --> 7-bit (or Quoted-Printable...)
if (length == count) {

View File

@ -36,6 +36,7 @@ VMIME_TEST_SUITE_BEGIN(charsetTest)
VMIME_TEST(testConvertStreamValid)
VMIME_TEST(testConvertStreamExtract)
VMIME_TEST(testEncodingHebrew1255)
//VMIME_TEST(testEncodingSelectionOnASCII)
// IDNA
VMIME_TEST(testEncodeIDNA)
@ -141,6 +142,16 @@ VMIME_TEST_SUITE_BEGIN(charsetTest)
VASSERT_EQ("1", "=?windows-1255?B?6fn3+On5+Pfp6fk=?=", encoded);
}
#if 0 /* decideImpl is not public */
void testEncodingSelectionOnASCII() {
const std::string a = "Hi\x01!", b = "Hi\x7f!";
VASSERT_EQ("1", vmime::encoding::decideImpl(std::begin(a), std::end(a)),
vmime::encoding::decideImpl(std::begin(b), std::end(b)));
}
#endif
static const vmime::string convertHelper(
const vmime::string& in,
const vmime::charset& csrc,