diff --git a/app/src/main/java/org/thoughtcrime/securesms/backup/BackupVerifier.kt b/app/src/main/java/org/thoughtcrime/securesms/backup/BackupVerifier.kt index 73073ac01e..5406ba96a0 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/backup/BackupVerifier.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/backup/BackupVerifier.kt @@ -42,12 +42,20 @@ object BackupVerifier { frame = inputStream.readFrame() } + if (frame.end == true) { + count++ + } } if (cancellationSignal.isCanceled) { throw FullBackupExporter.BackupCanceledException() } + if (count != expectedCount) { + Log.e(TAG, "Incorrect number of frames expected $expectedCount but only $count") + return false + } + return true } diff --git a/app/src/main/java/org/thoughtcrime/securesms/backup/FullBackupExporter.java b/app/src/main/java/org/thoughtcrime/securesms/backup/FullBackupExporter.java index fd3f527fe9..6872558241 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/backup/FullBackupExporter.java +++ b/app/src/main/java/org/thoughtcrime/securesms/backup/FullBackupExporter.java @@ -228,7 +228,7 @@ public class FullBackupExporter extends FullBackupBase { outputStream.close(); } } - return new BackupEvent(BackupEvent.Type.FINISHED, ++count, estimatedCountOutside); + return new BackupEvent(BackupEvent.Type.FINISHED, outputStream.frames, estimatedCountOutside); } private static long calculateCount(@NonNull Context context, @NonNull SQLiteDatabase input, List tables) { @@ -637,6 +637,8 @@ public class FullBackupExporter extends FullBackupBase { private final byte[] iv; private int counter; + private int frames; + private BackupFrameOutputStream(@NonNull OutputStream output, @NonNull String passphrase) throws IOException { try { byte[] salt = Util.getSecretBytes(32); @@ -796,6 +798,7 @@ public class FullBackupExporter extends FullBackupBase { out.write(length); out.write(frameCiphertext); out.write(frameMac, 0, 10); + frames++; } catch (InvalidKeyException | InvalidAlgorithmParameterException | IllegalBlockSizeException | BadPaddingException e) { throw new AssertionError(e); }