SettingsAccessor: Do not change data on invalid upgrade attempts

Make sure that the input data is returned unchanged if an invalid update
attempt is attempted.

Update tests accordingly.

Change-Id: If5c410bf1a757f984593bda871763af64d8dd972
Reviewed-by: Marco Bubke <marco.bubke@qt.io>
This commit is contained in:
Tobias Hunger
2017-11-22 10:45:23 +01:00
parent 9246a77a2f
commit 5d6c2ca159
2 changed files with 8 additions and 37 deletions

View File

@@ -353,8 +353,7 @@ bool SettingsAccessor::isValidVersionAndId(const int version, const QByteArray &
QVariantMap SettingsAccessor::upgradeSettings(const QVariantMap &data) const QVariantMap SettingsAccessor::upgradeSettings(const QVariantMap &data) const
{ {
const int version = versionFromMap(data); const int version = versionFromMap(data);
if (!isValidVersionAndId(version, settingsIdFromMap(data)))
if (data.isEmpty())
return data; return data;
QVariantMap result; QVariantMap result;
@@ -363,11 +362,7 @@ QVariantMap SettingsAccessor::upgradeSettings(const QVariantMap &data) const
else else
result = data; result = data;
const int toVersion = currentVersion(); for (int i = version; i < currentVersion(); ++i) {
if (version >= toVersion || version < d->firstVersion())
return result;
for (int i = version; i < toVersion; ++i) {
VersionUpgrader *upgrader = d->upgrader(i); VersionUpgrader *upgrader = d->upgrader(i);
QTC_CHECK(upgrader && upgrader->version() == i); QTC_CHECK(upgrader && upgrader->version() == i);
result = upgrader->upgrade(result); result = upgrader->upgrade(result);

View File

@@ -331,16 +331,8 @@ void tst_SettingsAccessor::upgradeSettings_invalidId()
const QVariantMap result = accessor.upgradeSettings(input); const QVariantMap result = accessor.upgradeSettings(input);
// "OriginalVersion" was added. // Data is unchanged
for (auto it = result.cbegin(); it != result.cend(); ++it) { QCOMPARE(result, input);
if (it.key() == "OriginalVersion")
QCOMPARE(it.value().toInt(), startVersion);
else if (input.contains(it.key())) // extra settings pass through unchanged!
QCOMPARE(it.value(), input.value(it.key()));
else
QVERIFY2(false, "Unexpected value found in upgraded result!");
}
QCOMPARE(result.size(), input.size() + 1); // OriginalVersion was added
} }
void tst_SettingsAccessor::upgradeSettings_tooOld() void tst_SettingsAccessor::upgradeSettings_tooOld()
@@ -351,16 +343,8 @@ void tst_SettingsAccessor::upgradeSettings_tooOld()
const QVariantMap result = accessor.upgradeSettings(input); const QVariantMap result = accessor.upgradeSettings(input);
// "OriginalVersion" was added. // Data is unchanged
for (auto it = result.cbegin(); it != result.cend(); ++it) { QCOMPARE(result, input);
if (it.key() == "OriginalVersion")
QCOMPARE(it.value().toInt(), startVersion);
else if (input.contains(it.key())) // extra settings pass through unchanged!
QCOMPARE(it.value(), input.value(it.key()));
else
QVERIFY2(false, "Unexpected value found in upgraded result!");
}
QCOMPARE(result.size(), input.size() + 1); // OriginalVersion was added
} }
void tst_SettingsAccessor::upgradeSettings_tooNew() void tst_SettingsAccessor::upgradeSettings_tooNew()
@@ -371,16 +355,8 @@ void tst_SettingsAccessor::upgradeSettings_tooNew()
const QVariantMap result = accessor.upgradeSettings(input); const QVariantMap result = accessor.upgradeSettings(input);
// "OriginalVersion" was added. // Data is unchanged
for (auto it = result.cbegin(); it != result.cend(); ++it) { QCOMPARE(result, input);
if (it.key() == "OriginalVersion")
QCOMPARE(it.value().toInt(), startVersion);
else if (input.contains(it.key())) // extra settings pass through unchanged!
QCOMPARE(it.value(), input.value(it.key()));
else
QVERIFY2(false, "Unexpected value found in upgraded result!");
}
QCOMPARE(result.size(), input.size() + 1); // OriginalVersion was added
} }
void tst_SettingsAccessor::upgradeSettings_oneStep() void tst_SettingsAccessor::upgradeSettings_oneStep()