This is an automated email from the ASF dual-hosted git repository.

Arsnael pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/james-project.git

commit c2700af5cdd3b86b323f456419acf0de08dd7e6d
Author: Benoit TELLIER <[email protected]>
AuthorDate: Thu Apr 23 15:57:14 2026 +0200

    [FIX] Improve leak management when error occurs
---
 .../org/apache/james/server/core/MimeMessageWrapper.java  | 15 ++++++++++-----
 .../org/apache/james/smtpserver/JamesDataCmdHandler.java  |  9 +++++++--
 2 files changed, 17 insertions(+), 7 deletions(-)

diff --git 
a/server/container/core/src/main/java/org/apache/james/server/core/MimeMessageWrapper.java
 
b/server/container/core/src/main/java/org/apache/james/server/core/MimeMessageWrapper.java
index 2e6f2e64bc..8e1027eb24 100644
--- 
a/server/container/core/src/main/java/org/apache/james/server/core/MimeMessageWrapper.java
+++ 
b/server/container/core/src/main/java/org/apache/james/server/core/MimeMessageWrapper.java
@@ -158,11 +158,16 @@ public class MimeMessageWrapper extends MimeMessage 
implements Disposable {
                     saved = true;
                 } else {
                     MimeMessageInputStreamSource src = 
MimeMessageInputStreamSource.create("MailCopy-" + UUID.randomUUID().toString());
-                    OutputStream out = src.getWritableOutputStream();
-                    original.writeTo(out);
-                    out.close();
-                    source = src;
-                    saved = true;
+                    try {
+                        OutputStream out = src.getWritableOutputStream();
+                        original.writeTo(out);
+                        out.close();
+                        source = src;
+                        saved = true;
+                    } catch (IOException ex) {
+                        src.dispose();
+                        throw ex;
+                    }
                 }
 
             } catch (IOException ex) {
diff --git 
a/server/protocols/protocols-smtp/src/main/java/org/apache/james/smtpserver/JamesDataCmdHandler.java
 
b/server/protocols/protocols-smtp/src/main/java/org/apache/james/smtpserver/JamesDataCmdHandler.java
index 629ba7fad0..36ba100d12 100644
--- 
a/server/protocols/protocols-smtp/src/main/java/org/apache/james/smtpserver/JamesDataCmdHandler.java
+++ 
b/server/protocols/protocols-smtp/src/main/java/org/apache/james/smtpserver/JamesDataCmdHandler.java
@@ -52,8 +52,13 @@ public class JamesDataCmdHandler extends DataCmdHandler {
     protected SMTPResponse doDATA(SMTPSession session, String argument) {
         try {
             MimeMessageInputStreamSource mmiss = 
MimeMessageInputStreamSource.create(MailImpl.getId());
-            ExtendedSMTPSession extendedSMTPSession = (ExtendedSMTPSession) 
session;
-            extendedSMTPSession.setMimeMessageInputStreamSource(mmiss);
+            try {
+                ExtendedSMTPSession extendedSMTPSession = 
(ExtendedSMTPSession) session;
+                extendedSMTPSession.setMimeMessageInputStreamSource(mmiss);
+            } catch (Exception e) {
+                mmiss.dispose();
+                throw e;
+            }
         } catch (Exception e) {
             LOGGER.warn("Error creating mimemessagesource for incoming data", 
e);
             return new SMTPResponse(SMTPRetCode.LOCAL_ERROR, "Unexpected error 
preparing to receive DATA.");


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to