Author: niallp
Date: Fri Oct 12 16:36:12 2007
New Revision: 584325

URL: http://svn.apache.org/viewvc?rev=584325&view=rev
Log:
IO-128 - currently file name "normalization" errors in the equals method causes 
a mis-leading NullPointerException. Adding a check for this and throwing an 
IllegalArgumentException with a better message should improve the user 
experience.

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

Modified: 
commons/proper/io/trunk/src/java/org/apache/commons/io/FilenameUtils.java
URL: 
http://svn.apache.org/viewvc/commons/proper/io/trunk/src/java/org/apache/commons/io/FilenameUtils.java?rev=584325&r1=584324&r2=584325&view=diff
==============================================================================
--- commons/proper/io/trunk/src/java/org/apache/commons/io/FilenameUtils.java 
(original)
+++ commons/proper/io/trunk/src/java/org/apache/commons/io/FilenameUtils.java 
Fri Oct 12 16:36:12 2007
@@ -977,6 +977,10 @@
         if (normalized) {
             filename1 = normalize(filename1);
             filename2 = normalize(filename2);
+            if (filename1 == null || filename2 == null) {
+                throw new IllegalArgumentException(
+                    "Error normalizing one or both of the file names");
+            }
         }
         if (caseSensitivity == null) {
             caseSensitivity = IOCase.SENSITIVE;

Modified: 
commons/proper/io/trunk/src/test/org/apache/commons/io/FilenameUtilsTestCase.java
URL: 
http://svn.apache.org/viewvc/commons/proper/io/trunk/src/test/org/apache/commons/io/FilenameUtilsTestCase.java?rev=584325&r1=584324&r2=584325&view=diff
==============================================================================
--- 
commons/proper/io/trunk/src/test/org/apache/commons/io/FilenameUtilsTestCase.java
 (original)
+++ 
commons/proper/io/trunk/src/test/org/apache/commons/io/FilenameUtilsTestCase.java
 Fri Oct 12 16:36:12 2007
@@ -784,6 +784,30 @@
         assertEquals(false, FilenameUtils.equalsNormalizedOnSystem("a/b/", 
"a/b"));
     }
 
+    /**
+     * Test for https://issues.apache.org/jira/browse/IO-128
+     */
+    public void testEqualsNormalizedError_IO_128() {
+        try {
+            FilenameUtils.equalsNormalizedOnSystem("//file.txt", "file.txt");
+            fail("Invalid normalized first file");
+        } catch(IllegalArgumentException e) {
+            // expected result
+        }
+        try {
+            FilenameUtils.equalsNormalizedOnSystem("file.txt", "//file.txt");
+            fail("Invalid normalized second file");
+        } catch(IllegalArgumentException e) {
+            // expected result
+        }
+        try {
+            FilenameUtils.equalsNormalizedOnSystem("//file.txt", "//file.txt");
+            fail("Invalid normalized both filse");
+        } catch(IllegalArgumentException e) {
+            // expected result
+        }
+    }
+
     public void testEquals_fullControl() {
         assertEquals(false, FilenameUtils.equals("file.txt", "FILE.TXT", true, 
IOCase.SENSITIVE));
         assertEquals(true, FilenameUtils.equals("file.txt", "FILE.TXT", true, 
IOCase.INSENSITIVE));


Reply via email to