From f403d09d0b4958d151790f312ec998ef39632b1a Mon Sep 17 00:00:00 2001 From: Jos van den Oever Date: Sat, 29 Dec 2018 18:27:13 +0100 Subject: Fix a regression introduced in 6a1852 Summary: Bytes from 'Strings' of type GroupString and KeyString should not be escaped because they are valid UTF-8. Only instances of ValueString should be escaped. This fixes the failing test KConfigTest::testEncoding Test Plan: Ran `ninja test` and found no errors. Reviewers: dfaure, arichardson, apol, aacid, ngraham Reviewed By: apol Subscribers: kde-frameworks-devel Tags: #frameworks Differential Revision: https://phabricator.kde.org/D17856 --- src/core/kconfigini.cpp | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) (limited to 'src/core/kconfigini.cpp') diff --git a/src/core/kconfigini.cpp b/src/core/kconfigini.cpp index 39e59364..b6749731 100644 --- a/src/core/kconfigini.cpp +++ b/src/core/kconfigini.cpp @@ -673,7 +673,12 @@ QByteArray KConfigIniBackend::stringToPrintable(const QByteArray &aString, Strin switch (s[i]) { default: // The \n, \t, \r cases (all < 32) are handled below; we can ignore them here - if (((unsigned char)s[i]) < 32 || ((unsigned char)s[i]) >= 127) { + if (((unsigned char)s[i]) < 32) { + goto doEscape; + } + // GroupString and KeyString should be valid UTF-8, but ValueString + // can be a bytearray with non-UTF-8 bytes that should be escaped. + if (type == ValueString && ((unsigned char)s[i]) >= 127) { goto doEscape; } *data++ = s[i]; -- cgit v1.2.1