diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/AttachmentDatabase.java b/app/src/main/java/org/thoughtcrime/securesms/database/AttachmentDatabase.java index 34b483b3d5..7c743d783f 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/AttachmentDatabase.java +++ b/app/src/main/java/org/thoughtcrime/securesms/database/AttachmentDatabase.java @@ -1076,12 +1076,18 @@ public class AttachmentDatabase extends Database { throws MmsException { try { + File tempFile = newFile(); MessageDigest messageDigest = MessageDigest.getInstance("SHA-256"); DigestInputStream digestInputStream = new DigestInputStream(in, messageDigest); - Pair out = ModernEncryptingPartOutputStream.createFor(attachmentSecret, destination, false); + Pair out = ModernEncryptingPartOutputStream.createFor(attachmentSecret, tempFile, false); long length = StreamUtil.copy(digestInputStream, out.second); String hash = Base64.encodeBytes(digestInputStream.getMessageDigest().digest()); + if (!tempFile.renameTo(destination)) { + Log.w(TAG, "Couldn't rename " + tempFile.getPath() + " to " + destination.getPath()); + throw new IllegalStateException("Couldn't rename " + tempFile.getPath() + " to " + destination.getPath()); + } + SQLiteDatabase database = databaseHelper.getSignalWritableDatabase(); Optional sharedDataInfo = findDuplicateDataFileInfo(database, hash, attachmentId); if (sharedDataInfo.isPresent()) {