You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by kr...@apache.org on 2015/08/06 14:22:42 UTC

svn commit: r1694480 - in /commons/proper/io/trunk/src: main/java/org/apache/commons/io/FilenameUtils.java test/java/org/apache/commons/io/FilenameUtilsTestCase.java

Author: krosenvold
Date: Thu Aug  6 12:22:42 2015
New Revision: 1694480

URL: http://svn.apache.org/r1694480
Log:
IO-484 Added filtering to getPath and getPrefix

Modified:
    commons/proper/io/trunk/src/main/java/org/apache/commons/io/FilenameUtils.java
    commons/proper/io/trunk/src/test/java/org/apache/commons/io/FilenameUtilsTestCase.java

Modified: commons/proper/io/trunk/src/main/java/org/apache/commons/io/FilenameUtils.java
URL: http://svn.apache.org/viewvc/commons/proper/io/trunk/src/main/java/org/apache/commons/io/FilenameUtils.java?rev=1694480&r1=1694479&r2=1694480&view=diff
==============================================================================
--- commons/proper/io/trunk/src/main/java/org/apache/commons/io/FilenameUtils.java (original)
+++ commons/proper/io/trunk/src/main/java/org/apache/commons/io/FilenameUtils.java Thu Aug  6 12:22:42 2015
@@ -757,7 +757,7 @@ public class FilenameUtils {
      * ie. both Unix and Windows prefixes are matched regardless.
      *
      * @param filename  the filename to query, null returns null
-     * @return the prefix of the file, null if invalid
+     * @return the prefix of the file, null if invalid. Null bytes inside string will be removed
      */
     public static String getPrefix(final String filename) {
         if (filename == null) {
@@ -768,9 +768,9 @@ public class FilenameUtils {
             return null;
         }
         if (len > filename.length()) {
-            return filename + UNIX_SEPARATOR;  // we know this only happens for unix
+            return filterNullBytes(filename + UNIX_SEPARATOR);  // we know this only happens for unix
         }
-        return filename.substring(0, len);
+        return filterNullBytes(filename.substring(0, len));
     }
 
     /**
@@ -793,7 +793,8 @@ public class FilenameUtils {
      * See {@link #getFullPath(String)} for the method that retains the prefix.
      *
      * @param filename  the filename to query, null returns null
-     * @return the path of the file, an empty string if none exists, null if invalid
+     * @return the path of the file, an empty string if none exists, null if invalid.
+     * Null bytes inside string will be removed
      */
     public static String getPath(final String filename) {
         return doGetPath(filename, 1);
@@ -820,7 +821,8 @@ public class FilenameUtils {
      * See {@link #getFullPathNoEndSeparator(String)} for the method that retains the prefix.
      *
      * @param filename  the filename to query, null returns null
-     * @return the path of the file, an empty string if none exists, null if invalid
+     * @return the path of the file, an empty string if none exists, null if invalid.
+     * Null bytes inside string will be removed
      */
     public static String getPathNoEndSeparator(final String filename) {
         return doGetPath(filename, 0);
@@ -831,7 +833,7 @@ public class FilenameUtils {
      *
      * @param filename  the filename
      * @param separatorAdd  0 to omit the end separator, 1 to return it
-     * @return the path
+     * @return the path. Null bytes inside string will be removed
      */
     private static String doGetPath(final String filename, final int separatorAdd) {
         if (filename == null) {
@@ -846,7 +848,7 @@ public class FilenameUtils {
         if (prefix >= filename.length() || index < 0 || prefix >= endIndex) {
             return "";
         }
-        return filename.substring(prefix, endIndex);
+        return filterNullBytes(filename.substring(prefix, endIndex));
     }
 
     /**

Modified: commons/proper/io/trunk/src/test/java/org/apache/commons/io/FilenameUtilsTestCase.java
URL: http://svn.apache.org/viewvc/commons/proper/io/trunk/src/test/java/org/apache/commons/io/FilenameUtilsTestCase.java?rev=1694480&r1=1694479&r2=1694480&view=diff
==============================================================================
--- commons/proper/io/trunk/src/test/java/org/apache/commons/io/FilenameUtilsTestCase.java (original)
+++ commons/proper/io/trunk/src/test/java/org/apache/commons/io/FilenameUtilsTestCase.java Thu Aug  6 12:22:42 2015
@@ -565,6 +565,7 @@ public class FilenameUtilsTestCase exten
         assertEquals("\\", FilenameUtils.getPrefix("\\a\\b\\c.txt"));
         assertEquals("~\\", FilenameUtils.getPrefix("~\\a\\b\\c.txt"));
         assertEquals("~user\\", FilenameUtils.getPrefix("~user\\a\\b\\c.txt"));
+        assertEquals("~user\\", FilenameUtils.getPrefix("~u\u0000ser\\a\\b\\c.txt"));
     }
 
     public void testGetPath() {
@@ -601,6 +602,7 @@ public class FilenameUtilsTestCase exten
         assertEquals("a/b/", FilenameUtils.getPath("//server/a/b/c.txt"));
         assertEquals("a/b/", FilenameUtils.getPath("~/a/b/c.txt"));
         assertEquals("a/b/", FilenameUtils.getPath("~user/a/b/c.txt"));
+        assertEquals("a/b/", FilenameUtils.getPath("~user/a/\u0000b/c.txt"));
     }
 
     public void testGetPathNoEndSeparator() {
@@ -637,6 +639,7 @@ public class FilenameUtilsTestCase exten
         assertEquals("a/b", FilenameUtils.getPathNoEndSeparator("//server/a/b/c.txt"));
         assertEquals("a/b", FilenameUtils.getPathNoEndSeparator("~/a/b/c.txt"));
         assertEquals("a/b", FilenameUtils.getPathNoEndSeparator("~user/a/b/c.txt"));
+        assertEquals("a/b", FilenameUtils.getPathNoEndSeparator("~user/a\u0000/b/c.txt"));
     }
 
     public void testGetFullPath() {