From 0c82446966f815f94aa5f4f894b733dcc5dd7b65 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bal=C3=A1zs=20Sz=C3=BCcs?= Date: Wed, 6 Aug 2025 20:35:39 +0200 Subject: [PATCH] optimize attachment handling and filename normalization --- .../common/util/PdfAttachmentHandler.java | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/app/common/src/main/java/stirling/software/common/util/PdfAttachmentHandler.java b/app/common/src/main/java/stirling/software/common/util/PdfAttachmentHandler.java index acc55fe95..2478aad94 100644 --- a/app/common/src/main/java/stirling/software/common/util/PdfAttachmentHandler.java +++ b/app/common/src/main/java/stirling/software/common/util/PdfAttachmentHandler.java @@ -68,7 +68,7 @@ public class PdfAttachmentHandler { try (PDDocument document = pdfDocumentFactory.load(pdfBytes); ByteArrayOutputStream outputStream = new ByteArrayOutputStream()) { - List multipartAttachments = new ArrayList<>(); + List multipartAttachments = new ArrayList<>(attachments.size()); for (int i = 0; i < attachments.size(); i++) { EmlParser.EmailAttachment attachment = attachments.get(i); if (attachment.getData() != null && attachment.getData().length > 0) { @@ -469,7 +469,10 @@ public class PdfAttachmentHandler { } String normalizedFilename = - java.text.Normalizer.normalize(filename, java.text.Normalizer.Form.NFC); + isAscii(filename) + ? filename + : java.text.Normalizer.normalize( + filename, java.text.Normalizer.Form.NFC); String uniqueFilename = ensureUniqueFilename(normalizedFilename, existingNames.keySet()); @@ -664,4 +667,14 @@ public class PdfAttachmentHandler { page.getAnnotations().add(fileAnnotation); } + + private static boolean isAscii(String str) { + if (str == null) return true; + for (int i = 0; i < str.length(); i++) { + if (str.charAt(i) > 127) { + return false; + } + } + return true; + } }