From 6c9d0bb938002e925471a8e7fd0613e612a0ef76 Mon Sep 17 00:00:00 2001 From: M66B Date: Fri, 4 Dec 2020 13:25:25 +0100 Subject: [PATCH] Catch TNEF attachment errors --- .../java/eu/faircode/email/MessageHelper.java | 54 ++++++++++--------- 1 file changed, 29 insertions(+), 25 deletions(-) diff --git a/app/src/main/java/eu/faircode/email/MessageHelper.java b/app/src/main/java/eu/faircode/email/MessageHelper.java index 58dded0219..f0eba9682d 100644 --- a/app/src/main/java/eu/faircode/email/MessageHelper.java +++ b/app/src/main/java/eu/faircode/email/MessageHelper.java @@ -2165,33 +2165,37 @@ public class MessageHelper { db.attachment().setDownloaded(attachment.id, (long) body.length()); } - for (org.apache.poi.hmef.Attachment at : msg.getAttachments()) { - String filename = at.getLongFilename(); - if (filename == null) - filename = at.getFilename(); - if (filename == null) { - String ext = at.getExtension(); - if (ext != null) - filename = "document." + ext; + for (org.apache.poi.hmef.Attachment at : msg.getAttachments()) + try { + String filename = at.getLongFilename(); + if (filename == null) + filename = at.getFilename(); + if (filename == null) { + String ext = at.getExtension(); + if (ext != null) + filename = "document." + ext; + } + + EntityAttachment attachment = new EntityAttachment(); + attachment.message = local.message; + attachment.sequence = local.sequence; + attachment.subsequence = ++subsequence; + attachment.name = filename; + attachment.type = Helper.guessMimeType(attachment.name); + attachment.disposition = Part.ATTACHMENT; + attachment.id = db.attachment().insertAttachment(attachment); + + byte[] data = at.getContents(); + try (OutputStream os = new FileOutputStream(attachment.getFile(context))) { + os.write(data); + } + + db.attachment().setDownloaded(attachment.id, (long) data.length); + } catch (Throwable ex) { + // java.lang.IllegalArgumentException: Attachment corrupt - no Data section + Log.e(ex); } - EntityAttachment attachment = new EntityAttachment(); - attachment.message = local.message; - attachment.sequence = local.sequence; - attachment.subsequence = ++subsequence; - attachment.name = filename; - attachment.type = Helper.guessMimeType(attachment.name); - attachment.disposition = Part.ATTACHMENT; - attachment.id = db.attachment().insertAttachment(attachment); - - byte[] data = at.getContents(); - try (OutputStream os = new FileOutputStream(attachment.getFile(context))) { - os.write(data); - } - - db.attachment().setDownloaded(attachment.id, (long) data.length); - } - StringBuilder sb = new StringBuilder(); for (org.apache.poi.hmef.attribute.TNEFAttribute attr : msg.getMessageAttributes()) sb.append(attr.toString()).append("\r\n");