Author: markt Date: Wed Dec 16 20:53:39 2015 New Revision: 1720448 URL: http://svn.apache.org/viewvc?rev=1720448&view=rev Log: Fix https://bz.apache.org/bugzilla/show_bug.cgi?id=58692 Make StandardJarScanner more robust. Log a warning if a class path entry cannot be scanned rather than triggering the failure of the web application. Includes a test case written by Derek Abdine.
Modified: tomcat/trunk/java/org/apache/tomcat/util/scan/StandardJarScanner.java tomcat/trunk/test/org/apache/tomcat/util/scan/TestStandardJarScanner.java tomcat/trunk/webapps/docs/changelog.xml Modified: tomcat/trunk/java/org/apache/tomcat/util/scan/StandardJarScanner.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/util/scan/StandardJarScanner.java?rev=1720448&r1=1720447&r2=1720448&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/tomcat/util/scan/StandardJarScanner.java (original) +++ tomcat/trunk/java/org/apache/tomcat/util/scan/StandardJarScanner.java Wed Dec 16 20:53:39 2015 @@ -20,7 +20,6 @@ import java.io.File; import java.io.IOException; import java.net.JarURLConnection; import java.net.MalformedURLException; -import java.net.URISyntaxException; import java.net.URL; import java.net.URLClassLoader; import java.net.URLConnection; @@ -36,6 +35,7 @@ import org.apache.tomcat.JarScanFilter; import org.apache.tomcat.JarScanType; import org.apache.tomcat.JarScanner; import org.apache.tomcat.JarScannerCallback; +import org.apache.tomcat.util.ExceptionUtils; import org.apache.tomcat.util.res.StringManager; /** @@ -336,10 +336,11 @@ public class StandardJarScanner implemen } } } - } catch (URISyntaxException e) { + } catch (Throwable t) { + ExceptionUtils.handleThrowable(t); // Wrap the exception and re-throw IOException ioe = new IOException(); - ioe.initCause(e); + ioe.initCause(t); throw ioe; } } Modified: tomcat/trunk/test/org/apache/tomcat/util/scan/TestStandardJarScanner.java URL: http://svn.apache.org/viewvc/tomcat/trunk/test/org/apache/tomcat/util/scan/TestStandardJarScanner.java?rev=1720448&r1=1720447&r2=1720448&view=diff ============================================================================== --- tomcat/trunk/test/org/apache/tomcat/util/scan/TestStandardJarScanner.java (original) +++ tomcat/trunk/test/org/apache/tomcat/util/scan/TestStandardJarScanner.java Wed Dec 16 20:53:39 2015 @@ -19,6 +19,7 @@ package org.apache.tomcat.util.scan; import java.io.File; import java.io.IOException; import java.net.JarURLConnection; +import java.net.MalformedURLException; import java.net.URL; import java.net.URLClassLoader; import java.util.ArrayList; @@ -68,6 +69,31 @@ public class TestStandardJarScanner { } } + + /** + * Tomcat should ignore URLs which do not have a file part and do not use the file scheme. + */ + @Test + public void skipsInvalidClasspathURLNoFilePartNoFileScheme() { + StandardJarScanner scanner = new StandardJarScanner(); + LoggingCallback callback = new LoggingCallback(); + TesterServletContext context = new TesterServletContext() { + @Override + public ClassLoader getClassLoader() { + URLClassLoader urlClassLoader; + try { + urlClassLoader = new URLClassLoader( + new URL[] { new URL("http://felix.extensions:9/") }); + } catch (MalformedURLException e) { + throw new RuntimeException(e); + } + return urlClassLoader; + } + }; + scanner.scan(JarScanType.PLUGGABILITY, context, callback); + } + + private static class LoggingCallback implements JarScannerCallback { List<String> callbacks = new ArrayList<>(); Modified: tomcat/trunk/webapps/docs/changelog.xml URL: http://svn.apache.org/viewvc/tomcat/trunk/webapps/docs/changelog.xml?rev=1720448&r1=1720447&r2=1720448&view=diff ============================================================================== --- tomcat/trunk/webapps/docs/changelog.xml (original) +++ tomcat/trunk/webapps/docs/changelog.xml Wed Dec 16 20:53:39 2015 @@ -137,6 +137,12 @@ <code>HttpServletRequest.getContextPath()</code>. This is a follow-up to the fix for <bug>57215</bug>. (markt) </fix> + <fix> + <bug>58692</bug>: Make <code>StandardJarScanner</code> more robust. Log + a warning if a class path entry cannot be scanned rather than triggering + the failure of the web application. Includes a test case written by + Derek Abdine. (markt) + </fix> </changelog> </subsection> <subsection name="Coyote"> --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org