From 2b0dc598295518ee39aa37f26d7d235b4d19bef1 Mon Sep 17 00:00:00 2001 From: M66B Date: Thu, 6 Sep 2018 10:24:30 +0000 Subject: [PATCH] Handle parse exception --- .../java/eu/faircode/email/MessageHelper.java | 77 ++++++++++++------- .../eu/faircode/email/ServiceSynchronize.java | 8 -- 2 files changed, 50 insertions(+), 35 deletions(-) diff --git a/app/src/main/java/eu/faircode/email/MessageHelper.java b/app/src/main/java/eu/faircode/email/MessageHelper.java index c5d0af4e..fd4e533c 100644 --- a/app/src/main/java/eu/faircode/email/MessageHelper.java +++ b/app/src/main/java/eu/faircode/email/MessageHelper.java @@ -55,6 +55,7 @@ import javax.mail.internet.InternetAddress; import javax.mail.internet.MimeBodyPart; import javax.mail.internet.MimeMessage; import javax.mail.internet.MimeMultipart; +import javax.mail.internet.ParseException; public class MessageHelper { private MimeMessage imessage; @@ -300,6 +301,10 @@ public class MessageHelper { for (int len = is.read(buffer); len != -1; len = is.read(buffer)) os.write(buffer, 0, len); s = new String(os.toByteArray(), "US-ASCII"); + } catch (IOException ex) { + // IOException; Unknown encoding: none + Log.w(Helper.TAG, ex + "\n" + Log.getStackTraceString(ex)); + s = ex.toString(); } if (part.isMimeType("text/plain")) @@ -309,30 +314,40 @@ public class MessageHelper { if (part.isMimeType("multipart/alternative")) { String text = null; - Multipart mp = (Multipart) part.getContent(); - for (int i = 0; i < mp.getCount(); i++) { - Part bp = mp.getBodyPart(i); - if (bp.isMimeType("text/plain")) { - if (text == null) - text = getHtml(bp); - } else if (bp.isMimeType("text/html")) { - String s = getHtml(bp); - if (s != null) - return s; - } else - return getHtml(bp); + try { + Multipart mp = (Multipart) part.getContent(); + for (int i = 0; i < mp.getCount(); i++) { + Part bp = mp.getBodyPart(i); + if (bp.isMimeType("text/plain")) { + if (text == null) + text = getHtml(bp); + } else if (bp.isMimeType("text/html")) { + String s = getHtml(bp); + if (s != null) + return s; + } else + return getHtml(bp); + } + } catch (ParseException ex) { + // ParseException: In parameter list boundary="...">, expected parameter name, got ";" + Log.w(Helper.TAG, ex + "\n" + Log.getStackTraceString(ex)); + text = ex.toString(); } return text; } - if (part.isMimeType("multipart/*")) { - Multipart mp = (Multipart) part.getContent(); - for (int i = 0; i < mp.getCount(); i++) { - String s = getHtml(mp.getBodyPart(i)); - if (s != null) - return s; + if (part.isMimeType("multipart/*")) + try { + Multipart mp = (Multipart) part.getContent(); + for (int i = 0; i < mp.getCount(); i++) { + String s = getHtml(mp.getBodyPart(i)); + if (s != null) + return s; + } + } catch (ParseException ex) { + Log.w(Helper.TAG, ex + "\n" + Log.getStackTraceString(ex)); + return ex.toString(); } - } return null; } @@ -340,14 +355,18 @@ public class MessageHelper { public List getAttachments() throws IOException, MessagingException { List result = new ArrayList<>(); - Object content = imessage.getContent(); - if (content instanceof String) - return result; - - if (content instanceof Multipart) { - Multipart multipart = (Multipart) content; - for (int i = 0; i < multipart.getCount(); i++) - result.addAll(getAttachments(multipart.getBodyPart(i))); + try { + Object content = imessage.getContent(); + if (content instanceof String) + return result; + + if (content instanceof Multipart) { + Multipart multipart = (Multipart) content; + for (int i = 0; i < multipart.getCount(); i++) + result.addAll(getAttachments(multipart.getBodyPart(i))); + } + } catch (ParseException ex) { + Log.w(Helper.TAG, ex + "\n" + Log.getStackTraceString(ex)); } return result; @@ -363,7 +382,11 @@ public class MessageHelper { } catch (UnsupportedEncodingException ex) { Log.w(Helper.TAG, "attachment content type=" + part.getContentType()); content = part.getInputStream(); + } catch (ParseException ex) { + Log.w(Helper.TAG, ex + "\n" + Log.getStackTraceString(ex)); + content = null; } + if (content instanceof InputStream || content instanceof String) { String disposition; try { diff --git a/app/src/main/java/eu/faircode/email/ServiceSynchronize.java b/app/src/main/java/eu/faircode/email/ServiceSynchronize.java index 77d99c7f..45dec183 100644 --- a/app/src/main/java/eu/faircode/email/ServiceSynchronize.java +++ b/app/src/main/java/eu/faircode/email/ServiceSynchronize.java @@ -521,8 +521,6 @@ public class ServiceSynchronize extends LifecycleService { synchronizeMessage(ServiceSynchronize.this, folder, ifolder, (IMAPMessage) imessage, false); } catch (MessageRemovedException ex) { Log.w(Helper.TAG, folder.name + " " + ex + "\n" + Log.getStackTraceString(ex)); - } catch (Throwable ex) { - Log.e(Helper.TAG, folder.name + " " + ex + "\n" + Log.getStackTraceString(ex)); } EntityOperation.process(ServiceSynchronize.this); // download small attachments } catch (Throwable ex) { @@ -585,8 +583,6 @@ public class ServiceSynchronize extends LifecycleService { EntityOperation.process(ServiceSynchronize.this); // download small attachments } catch (MessageRemovedException ex) { Log.w(Helper.TAG, folder.name + " " + ex + "\n" + Log.getStackTraceString(ex)); - } catch (Throwable ex) { - Log.e(Helper.TAG, folder.name + " " + ex + "\n" + Log.getStackTraceString(ex)); } } catch (Throwable ex) { Log.e(Helper.TAG, folder.name + " " + ex + "\n" + Log.getStackTraceString(ex)); @@ -1286,10 +1282,6 @@ public class ServiceSynchronize extends LifecycleService { unchanged++; } catch (MessageRemovedException ex) { Log.w(Helper.TAG, folder.name + " " + ex + "\n" + Log.getStackTraceString(ex)); - } catch (FolderClosedException ex) { - throw ex; - } catch (Throwable ex) { - Log.e(Helper.TAG, folder.name + " " + ex + "\n" + Log.getStackTraceString(ex)); } EntityOperation.process(this); // download small attachments