diff options
-rw-r--r-- | src/corelib/io/qsettings.cpp | 12 | ||||
-rw-r--r-- | tests/auto/corelib/io/qsettings/tst_qsettings.cpp | 18 |
2 files changed, 25 insertions, 5 deletions
diff --git a/src/corelib/io/qsettings.cpp b/src/corelib/io/qsettings.cpp index 1748170324..7330a565a2 100644 --- a/src/corelib/io/qsettings.cpp +++ b/src/corelib/io/qsettings.cpp @@ -774,11 +774,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--); } @@ -836,6 +836,7 @@ StSkipSpaces: // fallthrough StNormal: + int chopLimit = stringResult.length(); while (i < to) { switch (str.at(i)) { case '\\': @@ -873,6 +874,7 @@ StNormal: } else { // the character is skipped } + chopLimit = stringResult.length(); break; case '"': ++i; @@ -884,7 +886,7 @@ StNormal: case ',': if (!inQuotedString) { if (!currentValueIsQuoted) - iniChopTrailingSpaces(stringResult); + iniChopTrailingSpaces(stringResult, chopLimit); if (!isStringList) { isStringList = true; stringListResult.clear(); @@ -924,6 +926,8 @@ StNormal: } } } + if (!currentValueIsQuoted) + iniChopTrailingSpaces(stringResult, chopLimit); goto end; StHexEscape: @@ -963,8 +967,6 @@ StOctEscape: } end: - if (!currentValueIsQuoted) - iniChopTrailingSpaces(stringResult); if (isStringList) stringListResult.append(stringResult); return isStringList; diff --git a/tests/auto/corelib/io/qsettings/tst_qsettings.cpp b/tests/auto/corelib/io/qsettings/tst_qsettings.cpp index 2c9868cd10..e7dae32256 100644 --- a/tests/auto/corelib/io/qsettings/tst_qsettings.cpp +++ b/tests/auto/corelib/io/qsettings/tst_qsettings.cpp @@ -128,6 +128,7 @@ private slots: void testEmptyData(); void testResourceFiles(); void testRegistryShortRootNames(); + void trailingWhitespace(); #ifdef Q_OS_MAC void fileName(); #endif @@ -2030,6 +2031,23 @@ void tst_QSettings::testRegistryShortRootNames() #endif } +void tst_QSettings::trailingWhitespace() +{ + { + QSettings s("tst_QSettings_trailingWhitespace"); + s.setValue("trailingSpace", "x "); + s.setValue("trailingTab", "x\t"); + s.setValue("trailingNewline", "x\n"); + } + { + QSettings s("tst_QSettings_trailingWhitespace"); + QCOMPARE(s.value("trailingSpace").toString(), QLatin1String("x ")); + QCOMPARE(s.value("trailingTab").toString(), QLatin1String("x\t")); + QCOMPARE(s.value("trailingNewline").toString(), QLatin1String("x\n")); + s.clear(); + } +} + void tst_QSettings::fromFile_data() { populateWithFormats(); |