From 32517888dfc7280dd96f1cbc5b6af880abc02bf6 Mon Sep 17 00:00:00 2001 From: M66B Date: Thu, 10 Sep 2026 08:18:35 +0200 Subject: [PATCH] Heuristically fix UTF-8 filenames --- .../com/sun/mail/imap/protocol/BODYSTRUCTURE.java | 13 +++++++++++++ .../main/java/eu/faircode/email/CharsetHelper.java | 2 +- 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/com/sun/mail/imap/protocol/BODYSTRUCTURE.java b/app/src/main/java/com/sun/mail/imap/protocol/BODYSTRUCTURE.java index 279582c4da..f20da79d3a 100644 --- a/app/src/main/java/com/sun/mail/imap/protocol/BODYSTRUCTURE.java +++ b/app/src/main/java/com/sun/mail/imap/protocol/BODYSTRUCTURE.java @@ -420,6 +420,19 @@ public class BODYSTRUCTURE implements Item { ", applying Exchange bug workaround"); value = ""; } + + try { + if (!r.supportsUtf8() && + ("name".equalsIgnoreCase(name) || "filename".equalsIgnoreCase(name)) && + !java.nio.charset.StandardCharsets.US_ASCII.newEncoder().canEncode(value)) { + byte[] octets = com.sun.mail.util.ASCIIUtility.getBytes(value); + if (eu.faircode.email.CharsetHelper.isUTF8(octets)) + value = new String(octets, java.nio.charset.StandardCharsets.UTF_8); + } + } catch (Throwable ex) { + eu.faircode.email.Log.e(ex); + } + list.set(name, value); } while (!r.isNextNonSpace(')')); list.combineSegments(); diff --git a/app/src/main/java/eu/faircode/email/CharsetHelper.java b/app/src/main/java/eu/faircode/email/CharsetHelper.java index 3fae8ce68e..b34ed612ac 100644 --- a/app/src/main/java/eu/faircode/email/CharsetHelper.java +++ b/app/src/main/java/eu/faircode/email/CharsetHelper.java @@ -92,7 +92,7 @@ public class CharsetHelper { } } - static boolean isUTF8(byte[] octets) { + public static boolean isUTF8(byte[] octets) { return isValid(octets, StandardCharsets.UTF_8); }