From b447adbe373d3940d2023d8e7a6ec21c7bfb8a48 Mon Sep 17 00:00:00 2001 From: Jan Engelhardt Date: Tue, 21 May 2024 15:47:05 +0200 Subject: Fixes/comments for guessBestEncoding (#304) * tests: add case for getRecommendedEncoding * vmime: avoid integer multiply wraparound in wordEncoder::guessBestEncoding If the input string is 42949673 characters long or larger, there will be integer overflow on 32-bit platforms when multiplying by 100. Switch that one computation to floating point. * vmime: update comment in wordEncoder::guessBestEncoding --- tests/parser/textTest.cpp | 12 ++++++++++++ 1 file changed, 12 insertions(+) (limited to 'tests/parser/textTest.cpp') diff --git a/tests/parser/textTest.cpp b/tests/parser/textTest.cpp index e9ddc262..f5111e79 100644 --- a/tests/parser/textTest.cpp +++ b/tests/parser/textTest.cpp @@ -32,6 +32,7 @@ VMIME_TEST_SUITE_BEGIN(textTest) VMIME_TEST_LIST_BEGIN VMIME_TEST(testConstructors) VMIME_TEST(testCopy) + VMIME_TEST(testRecommendedEncoding) VMIME_TEST(testNewFromString) VMIME_TEST(testDisplayForm) VMIME_TEST(testParse) @@ -155,6 +156,17 @@ VMIME_TEST_SUITE_BEGIN(textTest) VASSERT("copyFrom", t1 == t2); } + void testRecommendedEncoding() { + + vmime::encoding enc; + VASSERT_TRUE("1.1", vmime::charset("iso8859-1").getRecommendedEncoding(enc)); + VASSERT_TRUE("1.2", enc.getName() == vmime::encodingTypes::QUOTED_PRINTABLE); + VASSERT_TRUE("1.2", vmime::charset("iso8859-2").getRecommendedEncoding(enc)); + VASSERT_TRUE("1.3", enc.getName() == vmime::encodingTypes::QUOTED_PRINTABLE); + VASSERT_FALSE("1.3", vmime::charset(vmime::charsets::UTF_8).getRecommendedEncoding(enc)); + + } + void testNewFromString() { vmime::string s1 = "only ASCII characters"; -- cgit v1.2.3