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

jungm pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/tomee.git


The following commit(s) were added to refs/heads/main by this push:
     new d6b880f60a dont emit stacktrace on error
d6b880f60a is described below

commit d6b880f60ae99e621f826a0eec7d742b70b55a2e
Author: Markus Jung <[email protected]>
AuthorDate: Sat Aug 29 21:22:10 2026 +0200

    dont emit stacktrace on error
---
 .../openejb/server/httpd/HttpResponseImpl.java     | 46 +++-------------------
 .../openejb/server/httpd/OpenEJBHttpServer.java    |  3 +-
 .../server/httpd/OpenEJBHttpServerTest.java        | 28 +++++++++++++
 3 files changed, 34 insertions(+), 43 deletions(-)

diff --git 
a/server/openejb-http/src/main/java/org/apache/openejb/server/httpd/HttpResponseImpl.java
 
b/server/openejb-http/src/main/java/org/apache/openejb/server/httpd/HttpResponseImpl.java
index 19c83c80db..bd0c708ad3 100644
--- 
a/server/openejb-http/src/main/java/org/apache/openejb/server/httpd/HttpResponseImpl.java
+++ 
b/server/openejb-http/src/main/java/org/apache/openejb/server/httpd/HttpResponseImpl.java
@@ -39,7 +39,6 @@ import java.util.HashMap;
 import java.util.List;
 import java.util.Locale;
 import java.util.Map;
-import java.util.StringTokenizer;
 
 import static java.util.Collections.singletonList;
 
@@ -585,11 +584,11 @@ public class HttpResponseImpl implements HttpResponse {
     /**
      * creates an error with user defined variables
      *
-     * @param message the message of the error
-     * @param t       a Throwable to print a stack trace to
+     * @param message the message of the error, logged when debug logging is 
enabled
+     * @param t       the cause of the error, logged when debug logging is 
enabled
      * @return the HttpResponseImpl that this error belongs to
      */
-    protected static HttpResponseImpl createError(String message, final 
Throwable t) {
+    protected static HttpResponseImpl createError(final String message, final 
Throwable t) {
         final HttpResponseImpl res = new HttpResponseImpl(500, "Internal 
Server Error", "text/html");
         final PrintWriter body;
         try {
@@ -604,45 +603,10 @@ public class HttpResponseImpl implements HttpResponse {
         body.println("<br><br>");
 
         if (LOGGER.isDebugEnabled()) { // this is not an error, don't log it 
by default
-            LOGGER.error(String.valueOf(t), t);
+            LOGGER.error(message, t);
         }
 
-        if (message != null) {
-            final StringTokenizer msg = new StringTokenizer(message, "\n\r");
-
-            while (msg.hasMoreTokens()) {
-                body.print(msg.nextToken());
-                body.println("<br>");
-            }
-        }
-
-        if (t != null) {
-
-            PrintWriter writer = null;
-
-            try {
-                body.println("<br><br>");
-                body.println("Stack Trace:<br>");
-                final ByteArrayOutputStream baos = new ByteArrayOutputStream();
-                writer = new PrintWriter(baos);
-                t.printStackTrace(writer);
-                writer.flush();
-
-                message = new String(baos.toByteArray());
-                final StringTokenizer msg = new StringTokenizer(message, 
"\n\r");
-
-                while (msg.hasMoreTokens()) {
-                    body.print(msg.nextToken());
-                    body.println("<br>");
-                }
-            } catch (final Exception e) {
-                //no-op
-            } finally {
-                if (writer != null) {
-                    writer.close();
-                }
-            }
-        }
+        body.println("The server encountered an internal error.");
 
         body.println("</body>");
         body.println("</html>");
diff --git 
a/server/openejb-http/src/main/java/org/apache/openejb/server/httpd/OpenEJBHttpServer.java
 
b/server/openejb-http/src/main/java/org/apache/openejb/server/httpd/OpenEJBHttpServer.java
index 4f83cc4a97..1cf463852f 100644
--- 
a/server/openejb-http/src/main/java/org/apache/openejb/server/httpd/OpenEJBHttpServer.java
+++ 
b/server/openejb-http/src/main/java/org/apache/openejb/server/httpd/OpenEJBHttpServer.java
@@ -271,8 +271,7 @@ public class OpenEJBHttpServer implements HttpServer {
             res.setCode(400);
             res.setResponseString("Could not read the request");
             try {
-                res.getWriter().println(t.getMessage());
-                t.printStackTrace(res.getWriter());
+                res.getWriter().println("Bad request");
             } catch (IOException e) {
                 // no-op
             }
diff --git 
a/server/openejb-http/src/test/java/org/apache/openejb/server/httpd/OpenEJBHttpServerTest.java
 
b/server/openejb-http/src/test/java/org/apache/openejb/server/httpd/OpenEJBHttpServerTest.java
index 959ff518d8..ef3d1b0440 100644
--- 
a/server/openejb-http/src/test/java/org/apache/openejb/server/httpd/OpenEJBHttpServerTest.java
+++ 
b/server/openejb-http/src/test/java/org/apache/openejb/server/httpd/OpenEJBHttpServerTest.java
@@ -28,7 +28,11 @@ import org.apache.openejb.util.NetworkUtil;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 
+import java.io.ByteArrayOutputStream;
+import java.io.InputStream;
+import java.io.OutputStream;
 import java.net.HttpURLConnection;
+import java.net.Socket;
 import java.net.URL;
 import java.security.Principal;
 import java.util.ArrayList;
@@ -39,6 +43,7 @@ import java.util.concurrent.CopyOnWriteArrayList;
 
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
 
 @EnableServices({"httpejbd"})
 @RunWith(ApplicationComposer.class)
@@ -74,6 +79,29 @@ public class OpenEJBHttpServerTest {
         }
     }
 
+    @Test
+    public void malformedRequestResponseContainsNoServerDetails() throws 
Exception {
+        final String response;
+        try (final Socket socket = new Socket("localhost", nextAvailablePort)) 
{
+            final OutputStream out = socket.getOutputStream();
+            out.write("GET /foo 
HTTP/1.1\r\nno-colon-header\r\n\r\n".getBytes());
+            out.flush();
+            socket.shutdownOutput();
+            final InputStream in = socket.getInputStream();
+            final ByteArrayOutputStream buffer = new ByteArrayOutputStream();
+            final byte[] chunk = new byte[1024];
+            int read;
+            while ((read = in.read(chunk)) != -1) {
+                buffer.write(chunk, 0, read);
+            }
+            response = buffer.toString();
+        }
+        assertTrue(response, response.startsWith("HTTP/1.1 500 "));
+        assertFalse(response, response.contains("Exception"));
+        assertFalse(response, response.contains("org.apache.openejb"));
+        assertFalse(response, response.contains("\tat "));
+    }
+
     @Configuration
     public Properties props() {
         nextAvailablePort = NetworkUtil.getNextAvailablePort();

Reply via email to