Fix crash in migration with corrupted settings.

This commit is contained in:
John Preston 2020-07-01 14:16:36 +04:00
parent eb1845e33b
commit 432ce4caa4

View file

@ -384,7 +384,7 @@ void start() {
EncryptedDescriptor settings; EncryptedDescriptor settings;
if (!DecryptLocal(settings, settingsEncrypted, SettingsKey)) { if (!DecryptLocal(settings, settingsEncrypted, SettingsKey)) {
LOG(("App Error: could not decrypt settings from settings file, maybe bad passcode...")); LOG(("App Error: could not decrypt settings from settings file..."));
return writeSettings(); return writeSettings();
} }
@ -422,7 +422,12 @@ void start() {
void writeSettings() { void writeSettings() {
if (!_settingsWriteAllowed) { if (!_settingsWriteAllowed) {
_settingsRewriteNeeded = true; _settingsRewriteNeeded = true;
return;
// We need to generate SettingsKey anyway,
// for the moveLegacyBackground to work.
if (SettingsKey) {
return;
}
} }
if (_basePath.isEmpty()) { if (_basePath.isEmpty()) {
LOG(("App Error: _basePath is empty in writeSettings()")); LOG(("App Error: _basePath is empty in writeSettings()"));
@ -442,6 +447,11 @@ void writeSettings() {
} }
settings.writeData(_settingsSalt); settings.writeData(_settingsSalt);
if (!_settingsWriteAllowed) {
EncryptedDescriptor data(0);
settings.writeEncrypted(data, SettingsKey);
return;
}
const auto configSerialized = LookupFallbackConfig().serialize(); const auto configSerialized = LookupFallbackConfig().serialize();
const auto applicationSettings = Core::App().settings().serialize(); const auto applicationSettings = Core::App().settings().serialize();