Author: markt
Date: Tue Apr 4 14:04:21 2017
New Revision: 1790119
URL: http://svn.apache.org/viewvc?rev=1790119&view=rev
Log:
Fix https://bz.apache.org/bugzilla/show_bug.cgi?id=60940
Improve the handling of the META-INF/ and META-INF/MANIFEST.MF entries for Jar
files located in /WEB-INF/lib when running a web application from a packed WAR
file.
Added:
tomcat/trunk/test/org/apache/catalina/webresources/TestJarWarResourceSet.java
Modified:
tomcat/trunk/java/org/apache/catalina/util/ExtensionValidator.java
tomcat/trunk/java/org/apache/catalina/webresources/JarWarResourceSet.java
tomcat/trunk/webapps/docs/changelog.xml
Modified: tomcat/trunk/java/org/apache/catalina/util/ExtensionValidator.java
URL:
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/util/ExtensionValidator.java?rev=1790119&r1=1790118&r2=1790119&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/catalina/util/ExtensionValidator.java
(original)
+++ tomcat/trunk/java/org/apache/catalina/util/ExtensionValidator.java Tue Apr
4 14:04:21 2017
@@ -150,12 +150,11 @@ public final class ExtensionValidator {
if (manifestResource.isFile()) {
// Primarily used for error reporting
String jarName = manifestResource.getURL().toExternalForm();
- Manifest jmanifest = null;
- try (InputStream is = manifestResource.getInputStream()) {
- jmanifest = new Manifest(is);
- ManifestResource mre = new ManifestResource(jarName,
- jmanifest, ManifestResource.APPLICATION);
- appManifestResources.add(mre);
+ Manifest jmanifest = manifestResource.getManifest();
+ if (jmanifest != null) {
+ ManifestResource mre = new ManifestResource(jarName,
+ jmanifest, ManifestResource.APPLICATION);
+ appManifestResources.add(mre);
}
}
}
Modified:
tomcat/trunk/java/org/apache/catalina/webresources/JarWarResourceSet.java
URL:
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/webresources/JarWarResourceSet.java?rev=1790119&r1=1790118&r2=1790119&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/catalina/webresources/JarWarResourceSet.java
(original)
+++ tomcat/trunk/java/org/apache/catalina/webresources/JarWarResourceSet.java
Tue Apr 4 14:04:21 2017
@@ -107,11 +107,28 @@ public class JarWarResourceSet extends A
try (JarInputStream jarIs = new JarInputStream(jarFileIs))
{
JarEntry entry = jarIs.getNextJarEntry();
+ boolean hasMetaInf = false;
while (entry != null) {
+ if (!hasMetaInf &&
entry.getName().startsWith("META-INF/")) {
+ hasMetaInf = true;
+ }
archiveEntries.put(entry.getName(), entry);
entry = jarIs.getNextJarEntry();
}
setManifest(jarIs.getManifest());
+ // Hacks to work-around JarInputStream swallowing these
+ // entries. The attributes for these entries will be
+ // incomplete. Making the attributes available would
+ // require (re-)reading the stream as a ZipInputStream
+ // and creating JarEntry objects from the ZipEntries.
+ if (hasMetaInf) {
+ JarEntry metaInfDir = new JarEntry("META-INF/");
+ archiveEntries.put(metaInfDir.getName(),
metaInfDir);
+ }
+ if (jarIs.getManifest() != null) {
+ JarEntry manifest = new
JarEntry("META-INF/MANIFEST.MF");
+ archiveEntries.put(manifest.getName(),
manifest);
+ }
}
} catch (IOException ioe) {
// Should never happen
Added:
tomcat/trunk/test/org/apache/catalina/webresources/TestJarWarResourceSet.java
URL:
http://svn.apache.org/viewvc/tomcat/trunk/test/org/apache/catalina/webresources/TestJarWarResourceSet.java?rev=1790119&view=auto
==============================================================================
---
tomcat/trunk/test/org/apache/catalina/webresources/TestJarWarResourceSet.java
(added)
+++
tomcat/trunk/test/org/apache/catalina/webresources/TestJarWarResourceSet.java
Tue Apr 4 14:04:21 2017
@@ -0,0 +1,40 @@
+package org.apache.catalina.webresources;
+
+import java.io.File;
+
+import org.junit.Assert;
+import org.junit.Before;
+import org.junit.Test;
+
+import org.apache.catalina.Context;
+import org.apache.catalina.LifecycleException;
+import org.apache.catalina.WebResource;
+import org.apache.catalina.startup.Tomcat;
+import org.apache.catalina.startup.TomcatBaseTest;
+
+public class TestJarWarResourceSet extends TomcatBaseTest {
+
+ @Before
+ public void register() {
+ TomcatURLStreamHandlerFactory.register();
+ }
+
+
+ @Test
+ public void testJarWarMetaInf() throws LifecycleException {
+ Tomcat tomcat = getTomcatInstance();
+
+ File warFile = new
File("test/webresources/war-url-connection.war");
+ Context ctx = tomcat.addContext("", warFile.getAbsolutePath());
+
+ tomcat.start();
+
+ StandardRoot root = (StandardRoot) ctx.getResources();
+
+ WebResource[] results =
root.getClassLoaderResources("/META-INF");
+
+ Assert.assertNotNull(results);
+ Assert.assertEquals(1, results.length);
+ Assert.assertNotNull(results[0].getURL());
+ }
+}
Modified: tomcat/trunk/webapps/docs/changelog.xml
URL:
http://svn.apache.org/viewvc/tomcat/trunk/webapps/docs/changelog.xml?rev=1790119&r1=1790118&r2=1790119&view=diff
==============================================================================
--- tomcat/trunk/webapps/docs/changelog.xml (original)
+++ tomcat/trunk/webapps/docs/changelog.xml Tue Apr 4 14:04:21 2017
@@ -64,6 +64,12 @@
Avoid a <code>NullPointerException</code> when reading attributes for a
running HTTP connector where TLS is not enabled. (markt)
</fix>
+ <fix>
+ <bug>60940</bug>: Improve the handling of the <code>META-INF/</code>
and
+ <code>META-INF/MANIFEST.MF</code> entries for Jar files located in
+ <code>/WEB-INF/lib</code> when running a web application from a packed
+ WAR file. (markt)
+ </fix>
</changelog>
</subsection>
<subsection name="Jasper">
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]