aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJan Engelhardt <[email protected]>2024-05-21 13:45:29 +0000
committerGitHub <[email protected]>2024-05-21 13:45:29 +0000
commit97d15b8cd77998f37c279a023aa9f07def956e60 (patch)
treea59028d321a5ecbdf3ee59887810bd1feb1f4ca3
parentResolve compiler warnings (#302) (diff)
downloadvmime-97d15b8cd77998f37c279a023aa9f07def956e60.tar.gz
vmime-97d15b8cd77998f37c279a023aa9f07def956e60.zip
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 <[email protected]>
-rw-r--r--src/vmime/encoding.cpp2
-rw-r--r--tests/parser/charsetTest.cpp11
2 files changed, 12 insertions, 1 deletions
diff --git a/src/vmime/encoding.cpp b/src/vmime/encoding.cpp
index e66e268a..bca31573 100644
--- a/src/vmime/encoding.cpp
+++ b/src/vmime/encoding.cpp
@@ -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) {
diff --git a/tests/parser/charsetTest.cpp b/tests/parser/charsetTest.cpp
index 01b04e11..362cb5f0 100644
--- a/tests/parser/charsetTest.cpp
+++ b/tests/parser/charsetTest.cpp
@@ -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,