~aleteoryx/muditaos

fafd4d0a17022517479abd1c87a1f53b94b7bb63 — Marek Niepieklo 4 years ago 44b20ee
[CP-815] Incorrect handling of versions during restore

Fixed comparison of OS and backup file versions
1 files changed, 16 insertions(+), 4 deletions(-)

M module-services/service-desktop/BackupRestore.cpp
M module-services/service-desktop/BackupRestore.cpp => module-services/service-desktop/BackupRestore.cpp +16 -4
@@ 451,6 451,7 @@ std::string BackupRestore::ReadVersionFromJsonFile(const std::filesystem::path &

bool BackupRestore::CheckBackupVersion(const std::filesystem::path &extractedBackup)
{
    auto versionOK           = true;
    const auto backupVersion = ReadVersionFromJsonFile(extractedBackup / bkp::backupInfo);

    if (backupVersion.empty()) {


@@ 465,17 466,28 @@ bool BackupRestore::CheckBackupVersion(const std::filesystem::path &extractedBac
        return false;
    }

    LOG_DEBUG("Current OS version %s, backup version %s", (currentVersion).c_str(), (backupVersion).c_str());

    auto const currentVersionTokens = utils::split(currentVersion, ".");
    auto const backupVersionTokens  = utils::split(backupVersion, ".");

    if (currentVersionTokens[0] < backupVersionTokens[0] || //  major version
        currentVersionTokens[1] < backupVersionTokens[1]) { //  minor version
    if (currentVersionTokens[0] < backupVersionTokens[0]) { //  major version
        versionOK = false;
    }
    else if (currentVersionTokens[0] == backupVersionTokens[0] && //  major version
             currentVersionTokens[1] < backupVersionTokens[1]) {  //  minor version
        versionOK = false;
    }

    if (!versionOK) {
        LOG_ERROR(
            "Current OS version %s older than backup version %s", (currentVersion).c_str(), (backupVersion).c_str());
        return false;
    }
    else {
        LOG_DEBUG("OK to restore backup version %s", (backupVersion).c_str());
    }

    return true;
    return versionOK;
}

bool BackupRestore::CanRestoreFromBackup(const std::filesystem::path &extractedBackup)