From a21df46481f580d0f74b5f82f3f3ce1df2445129 Mon Sep 17 00:00:00 2001 From: David Schulz Date: Mon, 26 Aug 2019 13:21:46 +0200 Subject: Utils: do not use QIODevice::Text open mode when saving text documents The mode replaces "\n" with "\r\n" in the byte array after encoding the text, resulting in file contents that cannot be decoded. Change-Id: I8010df56f28a479d516b8bcb887749905fd162ce Reviewed-by: Eike Ziller --- src/libs/utils/textfileformat.cpp | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/src/libs/utils/textfileformat.cpp b/src/libs/utils/textfileformat.cpp index afd4e62e83..ea682edae9 100644 --- a/src/libs/utils/textfileformat.cpp +++ b/src/libs/utils/textfileformat.cpp @@ -302,14 +302,11 @@ bool TextFileFormat::writeFile(const QString &fileName, QString plainText, QStri QTC_ASSERT(codec, return false); // Does the user want CRLF? If that is native, - // let QFile do the work, else manually add. + // do net let QFile do the work, because it replaces the line ending after the text was encoded, + // and this could lead to undecodable file contents. QIODevice::OpenMode fileMode = QIODevice::NotOpen; - if (lineTerminationMode == CRLFLineTerminator) { - if (NativeLineTerminator == CRLFLineTerminator) - fileMode |= QIODevice::Text; - else - plainText.replace(QLatin1Char('\n'), QLatin1String("\r\n")); - } + if (lineTerminationMode == CRLFLineTerminator) + plainText.replace(QLatin1Char('\n'), QLatin1String("\r\n")); FileSaver saver(fileName, fileMode); if (!saver.hasError()) { -- cgit v1.2.3