summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/libraries/qmfclient/qmailcodec.cpp4
-rw-r--r--tests/tst_qmailcodec/tst_qmailcodec.cpp9
2 files changed, 13 insertions, 0 deletions
diff --git a/src/libraries/qmfclient/qmailcodec.cpp b/src/libraries/qmfclient/qmailcodec.cpp
index 5d06c441..f34492a3 100644
--- a/src/libraries/qmfclient/qmailcodec.cpp
+++ b/src/libraries/qmfclient/qmailcodec.cpp
@@ -868,6 +868,10 @@ void QMailQuotedPrintableCodec::encodeChunk(QDataStream& out, const unsigned cha
}
bool escape = requiresEscape(input, _conformance, _encodeLineCharsRemaining);
+ // Escape last space on a line,
+ // see Rule#3 of http://www.ietf.org/rfc/rfc2045.txt page 19.
+ if (input == Space && it != end && (*it == CarriageReturn || *it == LineFeed))
+ escape = true;
int charsRequired = (escape ? 3 : 1);
// If we can't fit this character on the line, insert a line break
diff --git a/tests/tst_qmailcodec/tst_qmailcodec.cpp b/tests/tst_qmailcodec/tst_qmailcodec.cpp
index 5212f9e7..1c79f9f2 100644
--- a/tests/tst_qmailcodec/tst_qmailcodec.cpp
+++ b/tests/tst_qmailcodec/tst_qmailcodec.cpp
@@ -355,6 +355,15 @@ void tst_QMailCodec::line_lengths_data()
<< QByteArray("The =20=\r\n quick=\r\n\t\t brow=\r\nn\t =20=\r\n \tfox")
<< QByteArray("The__=20=\r\n_quick=\r\n=09=09=\r\n__brown=\r\n=09__=20=\r\n__=09fox");
+ QTest::newRow("middle line trailing spaces")
+ << 8
+ << 8
+ << " \nPlop"
+ << "UTF-8"
+ << QByteArray("ICAKUGxv\r\ncA==")
+ << QByteArray(" =20\r\nPlop")
+ << QByteArray("_=20\r\nPlop");
+
// Restore normality
QTest::newRow("restore default line length")
<< Base64MaxLineLength