This is an automated email from the ASF dual-hosted git repository. rmaucher pushed a commit to branch 9.0.x in repository https://gitbox.apache.org/repos/asf/tomcat.git
commit 76ddca1f626bcec36a44df37945785e6e2cd74a8 Author: remm <[email protected]> AuthorDate: Wed May 20 21:53:32 2026 +0200 Avoid possible NPEs Fix a cut and paste issue. Use clone on some arrays which were missing it. --- java/org/apache/catalina/connector/Request.java | 3 +++ java/org/apache/catalina/connector/Response.java | 9 +++++++++ java/org/apache/catalina/connector/ResponseFacade.java | 1 + java/org/apache/catalina/core/StandardContext.java | 2 +- java/org/apache/catalina/core/StandardHost.java | 4 ++-- java/org/apache/catalina/core/StandardHostValve.java | 3 ++- 6 files changed, 18 insertions(+), 4 deletions(-) diff --git a/java/org/apache/catalina/connector/Request.java b/java/org/apache/catalina/connector/Request.java index 6a8c807d07..1609fd2e88 100644 --- a/java/org/apache/catalina/connector/Request.java +++ b/java/org/apache/catalina/connector/Request.java @@ -1485,6 +1485,9 @@ public class Request implements HttpServletRequest { @Override public void removeAttribute(String name) { + if (name == null) { + throw new IllegalArgumentException(sm.getString("coyoteRequest.setAttribute.namenull")); + } // Remove the specified attribute // Pass special attributes to the native layer if (name.startsWith("org.apache.tomcat.")) { diff --git a/java/org/apache/catalina/connector/Response.java b/java/org/apache/catalina/connector/Response.java index 8b0006f39a..1713935cc1 100644 --- a/java/org/apache/catalina/connector/Response.java +++ b/java/org/apache/catalina/connector/Response.java @@ -817,6 +817,9 @@ public class Response implements HttpServletResponse { @Override public String getHeader(String name) { + if (name == null || name.isEmpty()) { + return null; + } // Need special handling for Content-Type and Content-Length due to // special handling of these in coyoteResponse char cc = name.charAt(0); @@ -860,6 +863,9 @@ public class Response implements HttpServletResponse { @Override public Collection<String> getHeaders(String name) { + if (name == null || name.isEmpty()) { + return Set.of(); + } // Need special handling for Content-Type and Content-Length due to // special handling of these in coyoteResponse char cc = name.charAt(0); @@ -1077,6 +1083,9 @@ public class Response implements HttpServletResponse { @Override public boolean containsHeader(String name) { + if (name == null || name.isEmpty()) { + return false; + } // Need special handling for Content-Type and Content-Length due to // special handling of these in coyoteResponse char cc = name.charAt(0); diff --git a/java/org/apache/catalina/connector/ResponseFacade.java b/java/org/apache/catalina/connector/ResponseFacade.java index 29d0295b01..d8f02f90c8 100644 --- a/java/org/apache/catalina/connector/ResponseFacade.java +++ b/java/org/apache/catalina/connector/ResponseFacade.java @@ -337,6 +337,7 @@ public class ResponseFacade implements HttpServletResponse { public void sendEarlyHints() { + checkFacade(); response.sendEarlyHints(); } diff --git a/java/org/apache/catalina/core/StandardContext.java b/java/org/apache/catalina/core/StandardContext.java index 413bdfc6f6..cb83b90086 100644 --- a/java/org/apache/catalina/core/StandardContext.java +++ b/java/org/apache/catalina/core/StandardContext.java @@ -5024,7 +5024,7 @@ public class StandardContext extends ContainerBase implements Context, Notificat try { instanceManager.backgroundProcess(); } catch (Exception e) { - log.warn(sm.getString("standardContext.backgroundProcess.instanceManager", resources), e); + log.warn(sm.getString("standardContext.backgroundProcess.instanceManager", instanceManager), e); } } super.backgroundProcess(); diff --git a/java/org/apache/catalina/core/StandardHost.java b/java/org/apache/catalina/core/StandardHost.java index 01e8979103..de5a60930a 100644 --- a/java/org/apache/catalina/core/StandardHost.java +++ b/java/org/apache/catalina/core/StandardHost.java @@ -670,7 +670,7 @@ public class StandardHost extends ContainerBase implements Host { @Override public String[] findAliases() { synchronized (aliasesLock) { - return this.aliases; + return this.aliases.clone(); } } @@ -771,7 +771,7 @@ public class StandardHost extends ContainerBase implements Host { */ public String[] getAliases() { synchronized (aliasesLock) { - return aliases; + return aliases.clone(); } } diff --git a/java/org/apache/catalina/core/StandardHostValve.java b/java/org/apache/catalina/core/StandardHostValve.java index c72a201595..d587cf5bea 100644 --- a/java/org/apache/catalina/core/StandardHostValve.java +++ b/java/org/apache/catalina/core/StandardHostValve.java @@ -258,7 +258,8 @@ final class StandardHostValve extends ValveBase { // If this is an aborted request from a client just log it and return if (realError instanceof ClientAbortException) { if (log.isDebugEnabled()) { - log.debug(sm.getString("standardHost.clientAbort", realError.getCause().getMessage())); + log.debug(sm.getString("standardHost.clientAbort", + realError.getCause() == null ? realError.getMessage() : realError.getCause().getMessage())); } return; } --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
