Author: markt Date: Thu Oct 13 14:00:20 2016 New Revision: 1764682 URL: http://svn.apache.org/viewvc?rev=1764682&view=rev Log: When calling getResourceAsStream() on a directory, ensure that null is returned. (markt)
Modified: tomcat/trunk/java/org/apache/catalina/webresources/AbstractArchiveResource.java tomcat/trunk/java/org/apache/catalina/webresources/EmptyResource.java tomcat/trunk/java/org/apache/catalina/webresources/FileResource.java tomcat/trunk/test/org/apache/catalina/webresources/AbstractTestResourceSet.java tomcat/trunk/webapps/docs/changelog.xml Modified: tomcat/trunk/java/org/apache/catalina/webresources/AbstractArchiveResource.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/webresources/AbstractArchiveResource.java?rev=1764682&r1=1764681&r2=1764682&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/catalina/webresources/AbstractArchiveResource.java (original) +++ tomcat/trunk/java/org/apache/catalina/webresources/AbstractArchiveResource.java Thu Oct 13 14:00:20 2016 @@ -113,6 +113,9 @@ public abstract class AbstractArchiveRes @Override public long getContentLength() { + if (isDirectory()) { + return -1; + } return resource.getSize(); } @@ -167,6 +170,11 @@ public abstract class AbstractArchiveRes Long.valueOf(len))); } + if (len < 0) { + // Content is not applicable here (e.g. is a directory) + return null; + } + int size = (int) len; byte[] result = new byte[size]; @@ -215,6 +223,9 @@ public abstract class AbstractArchiveRes @Override protected final InputStream doGetInputStream() { + if (isDirectory()) { + return null; + } return getJarInputStreamWrapper(); } Modified: tomcat/trunk/java/org/apache/catalina/webresources/EmptyResource.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/webresources/EmptyResource.java?rev=1764682&r1=1764681&r2=1764682&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/catalina/webresources/EmptyResource.java (original) +++ tomcat/trunk/java/org/apache/catalina/webresources/EmptyResource.java Thu Oct 13 14:00:20 2016 @@ -89,7 +89,7 @@ public class EmptyResource implements We @Override public long getContentLength() { - return 0; + return -1; } @Override Modified: tomcat/trunk/java/org/apache/catalina/webresources/FileResource.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/webresources/FileResource.java?rev=1764682&r1=1764681&r2=1764682&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/catalina/webresources/FileResource.java (original) +++ tomcat/trunk/java/org/apache/catalina/webresources/FileResource.java Thu Oct 13 14:00:20 2016 @@ -130,7 +130,11 @@ public class FileResource extends Abstra @Override public long getContentLength() { - if (needConvert) { + return getContentLengthInternal(needConvert); + } + + private long getContentLengthInternal(boolean convert) { + if (convert) { byte[] content = getContent(); if (content == null) { return -1; @@ -138,6 +142,11 @@ public class FileResource extends Abstra return content.length; } } + + if (isDirectory()) { + return -1; + } + return resource.length(); } @@ -179,7 +188,8 @@ public class FileResource extends Abstra @Override public final byte[] getContent() { - long len = getContentLength(); + // Use internal version to avoid loop when needConvert is true + long len = getContentLengthInternal(false); if (len > Integer.MAX_VALUE) { // Can't create an array that big @@ -188,6 +198,11 @@ public class FileResource extends Abstra Long.valueOf(len))); } + if (len < 0) { + // Content is not applicable here (e.g. is a directory) + return null; + } + int size = (int) len; byte[] result = new byte[size]; @@ -205,6 +220,7 @@ public class FileResource extends Abstra getLog().debug(sm.getString("abstractResource.getContentFail", getWebappPath()), ioe); } + return null; } if (needConvert) { Modified: tomcat/trunk/test/org/apache/catalina/webresources/AbstractTestResourceSet.java URL: http://svn.apache.org/viewvc/tomcat/trunk/test/org/apache/catalina/webresources/AbstractTestResourceSet.java?rev=1764682&r1=1764681&r2=1764682&view=diff ============================================================================== --- tomcat/trunk/test/org/apache/catalina/webresources/AbstractTestResourceSet.java (original) +++ tomcat/trunk/test/org/apache/catalina/webresources/AbstractTestResourceSet.java Thu Oct 13 14:00:20 2016 @@ -102,6 +102,9 @@ public abstract class AbstractTestResour Assert.assertTrue(webResource.isDirectory()); Assert.assertEquals("d1", webResource.getName()); Assert.assertEquals(getMount() + "/d1/", webResource.getWebappPath()); + Assert.assertEquals(-1, webResource.getContentLength()); + Assert.assertNull(webResource.getContent()); + Assert.assertNull(webResource.getInputStream()); } @Test @@ -110,6 +113,9 @@ public abstract class AbstractTestResour Assert.assertTrue(webResource.isDirectory()); Assert.assertEquals("d1", webResource.getName()); Assert.assertEquals(getMount() + "/d1/", webResource.getWebappPath()); + Assert.assertEquals(-1, webResource.getContentLength()); + Assert.assertNull(webResource.getContent()); + Assert.assertNull(webResource.getInputStream()); } @Test @@ -120,6 +126,9 @@ public abstract class AbstractTestResour Assert.assertEquals("d1-f1.txt", webResource.getName()); Assert.assertEquals( getMount() + "/d1/d1-f1.txt", webResource.getWebappPath()); + Assert.assertEquals(0, webResource.getContentLength()); + Assert.assertEquals(0, webResource.getContent().length); + Assert.assertNotNull(webResource.getInputStream()); } @Test Modified: tomcat/trunk/webapps/docs/changelog.xml URL: http://svn.apache.org/viewvc/tomcat/trunk/webapps/docs/changelog.xml?rev=1764682&r1=1764681&r2=1764682&view=diff ============================================================================== --- tomcat/trunk/webapps/docs/changelog.xml (original) +++ tomcat/trunk/webapps/docs/changelog.xml Thu Oct 13 14:00:20 2016 @@ -68,6 +68,10 @@ Exclude JAR files in <code>/WEB-INF/lib</code> from the static resource cache. (markt) </fix> + <fix> + When calling <code>getResourceAsStream()</code> on a directory, ensure + that <code>null</code> is returned. (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