diff --git a/src/core/kconfiggroup.cpp b/src/core/kconfiggroup.cpp --- a/src/core/kconfiggroup.cpp +++ b/src/core/kconfiggroup.cpp @@ -132,15 +132,20 @@ QList::ConstIterator it = list.constBegin(); const QList::ConstIterator end = list.constEnd(); - value = QByteArray(*it).replace('\\', QByteArrayLiteral("\\\\")).replace(',', QByteArrayLiteral("\\,")); + auto escape = [] (const QByteArray &str) { + return QByteArray(str).replace('\\', QByteArrayLiteral("\\\\")) + .replace(';', QByteArrayLiteral("\\;")) + .replace(',', QByteArrayLiteral("\\,")); + }; + + value = escape(*it); while (++it != end) { // In the loop, so it is not done when there is only one element. // Doing it repeatedly is a pretty cheap operation. value.reserve(4096); - value += ','; - value += QByteArray(*it).replace('\\', QByteArrayLiteral("\\\\")).replace(',', QByteArrayLiteral("\\,")); + value += ',' + escape(*it); } // To be able to distinguish an empty list from a list with one empty element. @@ -170,7 +175,7 @@ quoted = false; } else if (data[p].unicode() == '\\') { quoted = true; - } else if (data[p].unicode() == ',') { + } else if (data[p].unicode() == ',' || data[p].unicode() == ';') { val.squeeze(); // release any unused memory value.append(val); val.clear();