This is an automated email from the ASF dual-hosted git repository. markt pushed a commit to branch main in repository https://gitbox.apache.org/repos/asf/tomcat.git
commit eb91c3e64b327c19cd406338185100f0b5dfd74b Author: Mark Thomas <ma...@apache.org> AuthorDate: Mon Feb 17 11:42:30 2025 +0000 Align resource lookup with standard class loader behaviour When searching the web application class loader for a resource or resources by name, align the behaviour with the JRE class loaders and always return null if the provided name starts with "/". --- .../org/apache/catalina/loader/WebappClassLoaderBase.java | 14 +++++++++++--- .../org/apache/catalina/loader/TestWebappClassLoader.java | 15 +++++++++++++++ webapps/docs/changelog.xml | 6 ++++++ 3 files changed, 32 insertions(+), 3 deletions(-) diff --git a/java/org/apache/catalina/loader/WebappClassLoaderBase.java b/java/org/apache/catalina/loader/WebappClassLoaderBase.java index a34223a0b7..dfa13e814a 100644 --- a/java/org/apache/catalina/loader/WebappClassLoaderBase.java +++ b/java/org/apache/catalina/loader/WebappClassLoaderBase.java @@ -711,6 +711,10 @@ public abstract class WebappClassLoaderBase extends URLClassLoader URL url = null; + if (name.startsWith("/")) { + return null; + } + String path = nameToPath(name); if (!notFoundClassResources.contains(path)) { @@ -763,6 +767,10 @@ public abstract class WebappClassLoaderBase extends URLClassLoader LinkedHashSet<URL> result = new LinkedHashSet<>(); + if (name.startsWith("/")) { + return null; + } + String path = nameToPath(name); WebResource[] webResources = resources.getClassLoaderResources(path); @@ -912,6 +920,9 @@ public abstract class WebappClassLoaderBase extends URLClassLoader if (log.isTraceEnabled()) { log.trace(" Searching local repositories"); } + if (name.startsWith("/")) { + return null; + } String path = nameToPath(name); if (!notFoundClassResources.contains(path)) { WebResource resource = resources.getClassLoaderResource(path); @@ -2154,9 +2165,6 @@ public abstract class WebappClassLoaderBase extends URLClassLoader private String nameToPath(String name) { - if (name.startsWith("/")) { - return name; - } StringBuilder path = new StringBuilder(1 + name.length()); path.append('/'); path.append(name); diff --git a/test/org/apache/catalina/loader/TestWebappClassLoader.java b/test/org/apache/catalina/loader/TestWebappClassLoader.java index 11b53ab7e3..14c96db3cf 100644 --- a/test/org/apache/catalina/loader/TestWebappClassLoader.java +++ b/test/org/apache/catalina/loader/TestWebappClassLoader.java @@ -24,6 +24,7 @@ import java.net.URLClassLoader; import org.junit.Assert; import org.junit.Test; +import org.apache.catalina.Context; import org.apache.catalina.core.StandardContext; import org.apache.catalina.startup.Tomcat; import org.apache.catalina.startup.TomcatBaseTest; @@ -172,4 +173,18 @@ public class TestWebappClassLoader extends TomcatBaseTest { } } } + + + @Test + public void testResourceName() throws Exception { + Tomcat tomcat = getTomcatInstanceTestWebapp(false, true); + + ClassLoader cl = ((Context) tomcat.getHost().findChildren()[0]).getLoader().getClassLoader(); + + URL u1 = cl.getResource("org/apache/tomcat/Bug58096.java"); + Assert.assertNotNull(u1); + + URL u2 = cl.getResource("/org/apache/tomcat/Bug58096.java"); + Assert.assertNull(u2); + } } diff --git a/webapps/docs/changelog.xml b/webapps/docs/changelog.xml index 60fa73cea2..0c17363a69 100644 --- a/webapps/docs/changelog.xml +++ b/webapps/docs/changelog.xml @@ -143,6 +143,12 @@ of <strong>Context</strong> from <code>decode</code> to <code>reject</code>. (markt) </update> + <fix> + When searching the web application class loader for a resource or + resources by name, align the behaviour with the JRE class loaders and + always return <code>null</code> if the provided name starts with + <code>/</code>. (markt) + </fix> <!-- Entries for backport and removal before 12.0.0-M1 below this line --> </changelog> </subsection> --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org