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

Reply via email to