You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by ni...@apache.org on 2010/09/29 01:54:26 UTC
svn commit: r1002424 - in /commons/proper/io/trunk/src:
java/org/apache/commons/io/FileUtils.java
test/org/apache/commons/io/FileUtilsTestCase.java
Author: niallp
Date: Tue Sep 28 23:54:26 2010
New Revision: 1002424
URL: http://svn.apache.org/viewvc?rev=1002424&view=rev
Log:
IO-217 FileUtils.copyDirectoryToDirectory makes infinite loops - thanks to Roun Lee for the patch
Modified:
commons/proper/io/trunk/src/java/org/apache/commons/io/FileUtils.java
commons/proper/io/trunk/src/test/org/apache/commons/io/FileUtilsTestCase.java
Modified: commons/proper/io/trunk/src/java/org/apache/commons/io/FileUtils.java
URL: http://svn.apache.org/viewvc/commons/proper/io/trunk/src/java/org/apache/commons/io/FileUtils.java?rev=1002424&r1=1002423&r2=1002424&view=diff
==============================================================================
--- commons/proper/io/trunk/src/java/org/apache/commons/io/FileUtils.java (original)
+++ commons/proper/io/trunk/src/java/org/apache/commons/io/FileUtils.java Tue Sep 28 23:54:26 2010
@@ -1019,6 +1019,11 @@ public class FileUtils {
*/
private static void doCopyDirectory(File srcDir, File destDir, FileFilter filter,
boolean preserveFileDate, List<String> exclusionList) throws IOException {
+ // recurse
+ File[] files = filter == null ? srcDir.listFiles() : srcDir.listFiles(filter);
+ if (files == null) { // null if security restricted
+ throw new IOException("Failed to list contents of " + srcDir);
+ }
if (destDir.exists()) {
if (destDir.isDirectory() == false) {
throw new IOException("Destination '" + destDir + "' exists but is not a directory");
@@ -1034,11 +1039,6 @@ public class FileUtils {
if (destDir.canWrite() == false) {
throw new IOException("Destination '" + destDir + "' cannot be written to");
}
- // recurse
- File[] files = filter == null ? srcDir.listFiles() : srcDir.listFiles(filter);
- if (files == null) { // null if security restricted
- throw new IOException("Failed to list contents of " + srcDir);
- }
for (File file : files) {
File copiedFile = new File(destDir, file.getName());
if (exclusionList == null || !exclusionList.contains(file.getCanonicalPath())) {
Modified: commons/proper/io/trunk/src/test/org/apache/commons/io/FileUtilsTestCase.java
URL: http://svn.apache.org/viewvc/commons/proper/io/trunk/src/test/org/apache/commons/io/FileUtilsTestCase.java?rev=1002424&r1=1002423&r2=1002424&view=diff
==============================================================================
--- commons/proper/io/trunk/src/test/org/apache/commons/io/FileUtilsTestCase.java (original)
+++ commons/proper/io/trunk/src/test/org/apache/commons/io/FileUtilsTestCase.java Tue Sep 28 23:54:26 2010
@@ -905,6 +905,14 @@ public class FileUtilsTestCase extends F
assertEquals(expectedSize, FileUtils.sizeOfDirectory(grandParentDir));
}
+ /** Test for IO-217 FileUtils.copyDirectoryToDirectory makes infinite loops */
+ public void testCopyDirectoryToItself() throws Exception {
+ File dir = new File(getTestDirectory(), "itself");
+ dir.mkdirs();
+ FileUtils.copyDirectoryToDirectory(dir, dir);
+ assertEquals(1, LIST_WALKER.list(dir).size());
+ }
+
private void createFilesForTestCopyDirectory(File grandParentDir, File parentDir, File childDir) throws Exception {
File childDir2 = new File(parentDir, "child2");
File grandChildDir = new File(childDir, "grandChild");