From f2fb73b926498aae6ac3283005bb618b8b7a2477 Mon Sep 17 00:00:00 2001 From: M66B Date: Tue, 1 Nov 2022 08:21:16 +0100 Subject: [PATCH] Guarantee deletion of tmp file --- app/src/main/java/eu/faircode/email/Core.java | 54 ++++++++++--------- 1 file changed, 28 insertions(+), 26 deletions(-) diff --git a/app/src/main/java/eu/faircode/email/Core.java b/app/src/main/java/eu/faircode/email/Core.java index d613265664..c71ed8eefc 100644 --- a/app/src/main/java/eu/faircode/email/Core.java +++ b/app/src/main/java/eu/faircode/email/Core.java @@ -1520,36 +1520,38 @@ class Core { for (Message imessage : map.keySet()) { EntityMessage message = map.get(imessage); + Message icopy; File file = new File(message.getFile(context).getAbsoluteFile() + ".copy"); - try (OutputStream os = new BufferedOutputStream(new FileOutputStream(file))) { - imessage.writeTo(os); - } - - Properties props = MessageHelper.getSessionProperties(account.unicode); - Session isession = Session.getInstance(props, null); + try { + try (OutputStream os = new BufferedOutputStream(new FileOutputStream(file))) { + imessage.writeTo(os); + } - Message icopy; - try (InputStream is = new BufferedInputStream(new FileInputStream(file))) { - if (duplicate) { - String msgid = EntityMessage.generateMessageId(); - msgids.put(message, msgid); - icopy = new MimeMessageEx(isession, is, msgid); - icopy.saveChanges(); - - if (!copy) { - List tmps = db.message().getMessagesByMsgId(message.account, message.msgid); - for (EntityMessage tmp : tmps) - if (target.id.equals(tmp.folder)) { - db.message().setMessageMsgId(tmp.id, msgid); - break; - } - } - } else - icopy = new MimeMessage(isession, is); + Properties props = MessageHelper.getSessionProperties(account.unicode); + Session isession = Session.getInstance(props, null); + + try (InputStream is = new BufferedInputStream(new FileInputStream(file))) { + if (duplicate) { + String msgid = EntityMessage.generateMessageId(); + msgids.put(message, msgid); + icopy = new MimeMessageEx(isession, is, msgid); + icopy.saveChanges(); + + if (!copy) { + List tmps = db.message().getMessagesByMsgId(message.account, message.msgid); + for (EntityMessage tmp : tmps) + if (target.id.equals(tmp.folder)) { + db.message().setMessageMsgId(tmp.id, msgid); + break; + } + } + } else + icopy = new MimeMessage(isession, is); + } + } finally { + file.delete(); } - file.delete(); - for (Flags.Flag flag : imessage.getFlags().getSystemFlags()) icopy.setFlag(flag, true);