You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by ma...@apache.org on 2016/10/13 14:00:21 UTC
svn commit: r1764682 - in /tomcat/trunk:
java/org/apache/catalina/webresources/
test/org/apache/catalina/webresources/ webapps/docs/
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-unsubscribe@tomcat.apache.org
For additional commands, e-mail: dev-help@tomcat.apache.org