diff options
Diffstat (limited to 'src/corelib/io/qsettings.cpp')
-rw-r--r-- | src/corelib/io/qsettings.cpp | 12 |
1 files changed, 7 insertions, 5 deletions
diff --git a/src/corelib/io/qsettings.cpp b/src/corelib/io/qsettings.cpp index 01a70720ee..f6cd5aa7c9 100644 --- a/src/corelib/io/qsettings.cpp +++ b/src/corelib/io/qsettings.cpp @@ -672,11 +672,11 @@ void QSettingsPrivate::iniEscapedString(const QString &str, QByteArray &result, } } -inline static void iniChopTrailingSpaces(QString &str) +inline static void iniChopTrailingSpaces(QString &str, int limit) { int n = str.size() - 1; QChar ch; - while (n >= 0 && ((ch = str.at(n)) == QLatin1Char(' ') || ch == QLatin1Char('\t'))) + while (n >= limit && ((ch = str.at(n)) == QLatin1Char(' ') || ch == QLatin1Char('\t'))) str.truncate(n--); } @@ -734,6 +734,7 @@ StSkipSpaces: // fallthrough StNormal: + int chopLimit = stringResult.length(); while (i < to) { switch (str.at(i)) { case '\\': @@ -771,6 +772,7 @@ StNormal: } else { // the character is skipped } + chopLimit = stringResult.length(); break; case '"': ++i; @@ -782,7 +784,7 @@ StNormal: case ',': if (!inQuotedString) { if (!currentValueIsQuoted) - iniChopTrailingSpaces(stringResult); + iniChopTrailingSpaces(stringResult, chopLimit); if (!isStringList) { isStringList = true; stringListResult.clear(); @@ -822,6 +824,8 @@ StNormal: } } } + if (!currentValueIsQuoted) + iniChopTrailingSpaces(stringResult, chopLimit); goto end; StHexEscape: @@ -861,8 +865,6 @@ StOctEscape: } end: - if (!currentValueIsQuoted) - iniChopTrailingSpaces(stringResult); if (isStringList) stringListResult.append(stringResult); return isStringList; |