diff --git a/java/org/apache/jasper/servlet/TldScanner.java b/java/org/apache/jasper/servlet/TldScanner.java index b3a5db4..e5464fb 100644 --- a/java/org/apache/jasper/servlet/TldScanner.java +++ b/java/org/apache/jasper/servlet/TldScanner.java @@ -277,7 +277,7 @@ public class TldScanner { } } - private class TldScannerCallback implements JarScannerCallback { + class TldScannerCallback implements JarScannerCallback { private boolean tldFound = false; private boolean jarFound = false; @@ -381,7 +381,7 @@ public class TldScanner { } - private boolean scanFoundNoTLDs() { + boolean scanFoundNoTLDs() { return jarFound && !tldFound; } } diff --git a/test/org/apache/jasper/servlet/TestTldScanner.java b/test/org/apache/jasper/servlet/TestTldScanner.java index 6e61768..734f668 100644 --- a/test/org/apache/jasper/servlet/TestTldScanner.java +++ b/test/org/apache/jasper/servlet/TestTldScanner.java @@ -17,11 +17,15 @@ package org.apache.jasper.servlet; import java.io.File; +import java.lang.reflect.Constructor; +import java.net.JarURLConnection; +import java.net.URL; import java.util.HashMap; import java.util.List; import java.util.Map; import org.junit.Assert; +import org.junit.Ignore; import org.junit.Test; import org.apache.catalina.Context; @@ -29,6 +33,7 @@ import org.apache.catalina.startup.Tomcat; import org.apache.catalina.startup.TomcatBaseTest; import org.apache.tomcat.util.buf.ByteChunk; import org.apache.tomcat.util.scan.StandardJarScanner; +import org.easymock.EasyMock; public class TestTldScanner extends TomcatBaseTest { @@ -86,4 +91,30 @@ public class TestTldScanner extends TomcatBaseTest { Assert.assertTrue(result, result.indexOf("

" + expected + "

") > 0); } + @Ignore("Illustrates Bug 57647") + @Test + public void testBug57647() throws Exception { + TldScanner scanner = EasyMock.createMock(TldScanner.class); + Constructor constructor = + TldScanner.TldScannerCallback.class.getDeclaredConstructor(TldScanner.class); + constructor.setAccessible(true); + TldScanner.TldScannerCallback callback = constructor.newInstance((TldScanner) scanner); + + File webappDir = new File("webapps/examples"); + Assert.assertFalse(callback.scanFoundNoTLDs()); + scan(callback, webappDir, "WEB-INF/lib/taglibs-standard-spec-1.2.3.jar"); + Assert.assertTrue(callback.scanFoundNoTLDs()); + scan(callback, webappDir, "WEB-INF/lib/taglibs-standard-impl-1.2.3.jar"); + Assert.assertTrue(callback.scanFoundNoTLDs()); + } + + private static void scan(TldScanner.TldScannerCallback callback, File webapp, String path) + throws Exception { + String fullPath = new File(webapp, path).toURI().toString(); + URL jarUrl = new URL("jar:" + fullPath + "!/"); + JarURLConnection connection = (JarURLConnection) jarUrl.openConnection(); + callback.scan(connection, path, true); + } + } +