From 5f340fc84d89df83d17199c1aa8586d698c8c910 Mon Sep 17 00:00:00 2001 From: Aleix Pol Date: Mon, 16 Jul 2018 17:53:22 +0200 Subject: Fix issue when reading path lists Summary: They were not being split properly. Test Plan: Tests pass, including the new one. Reviewers: #frameworks, dfaure Reviewed By: dfaure Subscribers: dfaure, anthonyfieroni, kde-frameworks-devel Tags: #frameworks Differential Revision: https://phabricator.kde.org/D14162 --- autotests/kconfigtest.cpp | 7 ++++++- src/core/kconfigini.cpp | 6 ++++++ 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/autotests/kconfigtest.cpp b/autotests/kconfigtest.cpp index 4ae6d5b8..35075d1a 100644 --- a/autotests/kconfigtest.cpp +++ b/autotests/kconfigtest.cpp @@ -521,7 +521,9 @@ void KConfigTest::testPath() << "withBraces[$e]=file://${HOME}/foo" << endl << "URL[$e]=file://${HOME}/foo" << endl << "hostname[$e]=$(hostname)" << endl - << "noeol=foo"; // no EOL + << "escapes=aaa,bb/b,ccc\\,ccc" << endl + << "noeol=foo" // no EOL + ; } KConfig cf2(TEST_SUBDIR "pathtest"); KConfigGroup group = cf2.group("Test Group"); @@ -547,6 +549,9 @@ void KConfigTest::testPath() #endif QVERIFY(group.hasKey("noeol")); QCOMPARE(group.readEntry("noeol", QString()), QString("foo")); + + const auto val = QStringList { QStringLiteral("aaa"), QStringLiteral("bb/b"), QStringLiteral("ccc,ccc")}; + QCOMPARE(group.readPathEntry("escapes", QStringList()), val); } void KConfigTest::testPersistenceOfExpandFlagForPath() diff --git a/src/core/kconfigini.cpp b/src/core/kconfigini.cpp index 211b630e..c7b36efd 100644 --- a/src/core/kconfigini.cpp +++ b/src/core/kconfigini.cpp @@ -793,6 +793,12 @@ void KConfigIniBackend::printableToString(BufferFragment *aString, const QFile & r++; *r = ';'; break; + case ',': + // not really an escape sequence, but allowed in .desktop files, don't strip '\,' from the string + *r = '\\'; + r++; + *r = ','; + break; case 'x': if (i + 2 < l) { *r = charFromHex(str + i + 1, file, line); -- cgit v1.2.1