From a2c94bd9d23042d08ab702de58c14673dc7fe54e Mon Sep 17 00:00:00 2001 From: Atlante45 Date: Wed, 21 Feb 2018 18:06:31 -0800 Subject: [PATCH] Fix invalid iterator access --- domain-server/src/AssetsBackupHandler.cpp | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/domain-server/src/AssetsBackupHandler.cpp b/domain-server/src/AssetsBackupHandler.cpp index e86c007d07..ecbe8b58d8 100644 --- a/domain-server/src/AssetsBackupHandler.cpp +++ b/domain-server/src/AssetsBackupHandler.cpp @@ -279,7 +279,7 @@ void AssetsBackupHandler::recoverBackup(const QString& backupName, QuaZip& zip) qCWarning(asset_backup) << "Current asset mappings that might be stale."; } - const auto it = find_if(begin(_backups), end(_backups), [&](const AssetServerBackup& backup) { + auto it = find_if(begin(_backups), end(_backups), [&](const AssetServerBackup& backup) { return backup.name == backupName; }); if (it == end(_backups)) { @@ -306,6 +306,17 @@ void AssetsBackupHandler::recoverBackup(const QString& backupName, QuaZip& zip) writeAssetFile(asset, zipFile.readAll()); } } + + // iterator is end() and has been invalidated in the `loadBackup` call + // grab the new iterator + it = find_if(begin(_backups), end(_backups), [&](const AssetServerBackup& backup) { + return backup.name == backupName; + }); + + if (it == end(_backups)) { + qCCritical(asset_backup) << "Failed to recover backup:" << backupName; + return; + } } const auto& newMappings = it->mappings;