From 8ba90f266eed863dd5e6c13d60c21b380e0272de Mon Sep 17 00:00:00 2001 From: Daniel Gultsch Date: Wed, 20 Sep 2023 17:00:04 +0200 Subject: [PATCH] add explicit error message for outdated backup files --- .../ui/ImportBackupActivity.java | 3 +++ .../conversations/utils/BackupFileHeader.java | 22 ++++++++++++------- src/main/res/values/strings.xml | 1 + 3 files changed, 18 insertions(+), 8 deletions(-) diff --git a/src/conversations/java/eu/siacs/conversations/ui/ImportBackupActivity.java b/src/conversations/java/eu/siacs/conversations/ui/ImportBackupActivity.java index 6e4815159cd4ab8283d8836ae0f5582ed12d0563..ed998677b31ab2e45c915b88decf48cdadb708dd 100644 --- a/src/conversations/java/eu/siacs/conversations/ui/ImportBackupActivity.java +++ b/src/conversations/java/eu/siacs/conversations/ui/ImportBackupActivity.java @@ -30,6 +30,7 @@ import eu.siacs.conversations.databinding.DialogEnterPasswordBinding; import eu.siacs.conversations.services.ImportBackupService; import eu.siacs.conversations.ui.adapter.BackupFileAdapter; import eu.siacs.conversations.ui.util.SettingsUtils; +import eu.siacs.conversations.utils.BackupFileHeader; import eu.siacs.conversations.utils.ThemeHelper; public class ImportBackupActivity extends ActionBarActivity implements ServiceConnection, ImportBackupService.OnBackupFilesLoaded, BackupFileAdapter.OnItemClickedListener, ImportBackupService.OnBackupProcessed { @@ -131,6 +132,8 @@ public class ImportBackupActivity extends ActionBarActivity implements ServiceCo try { final ImportBackupService.BackupFile backupFile = ImportBackupService.BackupFile.read(this, uri); showEnterPasswordDialog(backupFile, finishOnCancel); + } catch (final BackupFileHeader.OutdatedBackupFileVersion e) { + Snackbar.make(binding.coordinator, R.string.outdated_backup_file_format, Snackbar.LENGTH_LONG).show(); } catch (final IOException | IllegalArgumentException e) { Log.d(Config.LOGTAG, "unable to open backup file " + uri, e); Snackbar.make(binding.coordinator, R.string.not_a_backup_file, Snackbar.LENGTH_LONG).show(); diff --git a/src/main/java/eu/siacs/conversations/utils/BackupFileHeader.java b/src/main/java/eu/siacs/conversations/utils/BackupFileHeader.java index 957ccfca157c44e3abd4e917324a741bac15f69b..3b536c27a89c5f874ae7181ea9cd20b10dc860fb 100644 --- a/src/main/java/eu/siacs/conversations/utils/BackupFileHeader.java +++ b/src/main/java/eu/siacs/conversations/utils/BackupFileHeader.java @@ -50,17 +50,19 @@ public class BackupFileHeader { public static BackupFileHeader read(DataInputStream inputStream) throws IOException { final int version = inputStream.readInt(); - if (version != VERSION) { - throw new IllegalArgumentException("Backup File version was " + version + " but app only supports version " + VERSION); - } - String app = inputStream.readUTF(); - String jid = inputStream.readUTF(); + final String app = inputStream.readUTF(); + final String jid = inputStream.readUTF(); long timestamp = inputStream.readLong(); - byte[] iv = new byte[12]; + final byte[] iv = new byte[12]; inputStream.readFully(iv); - byte[] salt = new byte[16]; + final byte[] salt = new byte[16]; inputStream.readFully(salt); - + if (version < VERSION) { + throw new OutdatedBackupFileVersion(); + } + if (version != VERSION) { + throw new IllegalArgumentException("Backup File version was " + version + " but app only supports version " + VERSION); + } return new BackupFileHeader(app, Jid.of(jid), timestamp, iv, salt); } @@ -84,4 +86,8 @@ public class BackupFileHeader { public long getTimestamp() { return timestamp; } + + public static class OutdatedBackupFileVersion extends RuntimeException { + + } } diff --git a/src/main/res/values/strings.xml b/src/main/res/values/strings.xml index d3af22e1584be0b94182c82727405643b9f27bc4..84b2cb61ed370f017f96566dbd53b43b3b0e6e2a 100644 --- a/src/main/res/values/strings.xml +++ b/src/main/res/values/strings.xml @@ -894,6 +894,7 @@ Event Open backup The file you selected is not a Conversations backup file + You are trying to import an outdated backup file format This account has already been setup Please enter the password for this account Could not perform this action