From 61b1eb2aa5892774d2e433fcdd62e424d25e0892 Mon Sep 17 00:00:00 2001 From: Stephen Paul Weber Date: Mon, 12 Dec 2022 20:06:42 -0500 Subject: [PATCH] Do not lose the file if the rename fails --- .../eu/siacs/conversations/http/HttpDownloadConnection.java | 5 ++++- .../xmpp/jingle/JingleFileTransferConnection.java | 4 +++- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/src/main/java/eu/siacs/conversations/http/HttpDownloadConnection.java b/src/main/java/eu/siacs/conversations/http/HttpDownloadConnection.java index e701d556d..67e29178d 100644 --- a/src/main/java/eu/siacs/conversations/http/HttpDownloadConnection.java +++ b/src/main/java/eu/siacs/conversations/http/HttpDownloadConnection.java @@ -195,9 +195,12 @@ public class HttpDownloadConnection implements Transferable { try { mXmppConnectionService.getFileBackend().setupRelativeFilePath(message, new FileInputStream(tmp), extension); file = mXmppConnectionService.getFileBackend().getFile(message); - tmp.renameTo(file); + boolean didRename = tmp.renameTo(file); + if (!didRename) throw new IOException("rename failed"); } catch (final IOException e) { + Log.w(Config.LOGTAG, "Failed to rename downloaded file: " + e); file = tmp; + message.setRelativeFilePath(file.getAbsolutePath()); } message.setTransferable(null); mXmppConnectionService.updateMessage(message); diff --git a/src/main/java/eu/siacs/conversations/xmpp/jingle/JingleFileTransferConnection.java b/src/main/java/eu/siacs/conversations/xmpp/jingle/JingleFileTransferConnection.java index b7b5aae4b..38ef60ccd 100644 --- a/src/main/java/eu/siacs/conversations/xmpp/jingle/JingleFileTransferConnection.java +++ b/src/main/java/eu/siacs/conversations/xmpp/jingle/JingleFileTransferConnection.java @@ -133,9 +133,11 @@ public class JingleFileTransferConnection extends AbstractJingleConnection imple try { xmppConnectionService.getFileBackend().setupRelativeFilePath(message, new FileInputStream(file), extension); finalFile = xmppConnectionService.getFileBackend().getFile(message); - file.renameTo(finalFile); + boolean didRename = file.renameTo(finalFile); + if (!didRename) throw new IOException("rename failed"); } catch (final IOException e) { finalFile = file; + message.setRelativeFilePath(finalFile.getAbsolutePath()); } xmppConnectionService.getFileBackend().updateFileParams(message, null, false); -- 2.38.4