You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@ant.apache.org by ja...@apache.org on 2018/11/03 12:23:50 UTC

[1/3] ant git commit: bz-62849 Check for filesystem loops due to symbolic links, in DirectoryScanner and Delete task

Repository: ant
Updated Branches:
  refs/heads/master 8efa4aff9 -> 6c860479a


bz-62849 Check for filesystem loops due to symbolic links, in DirectoryScanner and Delete task


Project: http://git-wip-us.apache.org/repos/asf/ant/repo
Commit: http://git-wip-us.apache.org/repos/asf/ant/commit/05bfffa2
Tree: http://git-wip-us.apache.org/repos/asf/ant/tree/05bfffa2
Diff: http://git-wip-us.apache.org/repos/asf/ant/diff/05bfffa2

Branch: refs/heads/master
Commit: 05bfffa247c470d12a5b93326a05d3fd0d890ce0
Parents: f1d2c15
Author: Michael Barker <mi...@gmail.com>
Authored: Sat Nov 3 17:41:10 2018 +0530
Committer: Jaikiran Pai <ja...@apache.org>
Committed: Sat Nov 3 17:41:10 2018 +0530

----------------------------------------------------------------------
 src/etc/testcases/core/directoryscanner.xml          |  5 +++++
 src/main/org/apache/tools/ant/DirectoryScanner.java  | 12 ++++++++++++
 src/main/org/apache/tools/ant/taskdefs/Delete.java   | 15 ++++++++++++++-
 .../org/apache/tools/ant/DirectoryScannerTest.java   | 14 ++++++++++++++
 4 files changed, 45 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ant/blob/05bfffa2/src/etc/testcases/core/directoryscanner.xml
----------------------------------------------------------------------
diff --git a/src/etc/testcases/core/directoryscanner.xml b/src/etc/testcases/core/directoryscanner.xml
index 7e8683a..71eb88b 100644
--- a/src/etc/testcases/core/directoryscanner.xml
+++ b/src/etc/testcases/core/directoryscanner.xml
@@ -38,4 +38,9 @@
         <touch file="${output}/alpha/beta/gamma/gamma.xml"/>
     </target>
 
+    <target name="symlink-nested-setup" depends="setUp">
+        <symlink link="${output}/alpha/beta/gamma/beta-link" resource="${output}/alpha/beta"/>
+        <touch file="${output}/alpha/beta/gamma/gamma.xml"/>
+    </target>
+
 </project>

http://git-wip-us.apache.org/repos/asf/ant/blob/05bfffa2/src/main/org/apache/tools/ant/DirectoryScanner.java
----------------------------------------------------------------------
diff --git a/src/main/org/apache/tools/ant/DirectoryScanner.java b/src/main/org/apache/tools/ant/DirectoryScanner.java
index a0e7837..15caa40 100644
--- a/src/main/org/apache/tools/ant/DirectoryScanner.java
+++ b/src/main/org/apache/tools/ant/DirectoryScanner.java
@@ -1258,6 +1258,18 @@ public class DirectoryScanner
             final String name = vpath + newFile;
             final TokenizedPath newPath = new TokenizedPath(path, newFile);
             final File file = new File(dir, newFile);
+
+            try {
+                // check if it's a filesystem "loop" due to symbolic links
+                if (FileUtils.getFileUtils().isLeadingPath(file.getAbsoluteFile(),
+                    dir.getAbsoluteFile(), true)) {
+                    continue;
+                }
+            } catch (IOException e) {
+                System.err.println("Failed to determine if " + file + " causes a " +
+                        "filesystem loop due to symbolic link; continuing");
+            }
+
             final String[] children = file.list();
             if (children == null || (children.length == 0 && file.isFile())) {
                 if (isIncluded(newPath)) {

http://git-wip-us.apache.org/repos/asf/ant/blob/05bfffa2/src/main/org/apache/tools/ant/taskdefs/Delete.java
----------------------------------------------------------------------
diff --git a/src/main/org/apache/tools/ant/taskdefs/Delete.java b/src/main/org/apache/tools/ant/taskdefs/Delete.java
index f887695..fdddbbf 100644
--- a/src/main/org/apache/tools/ant/taskdefs/Delete.java
+++ b/src/main/org/apache/tools/ant/taskdefs/Delete.java
@@ -19,6 +19,7 @@
 package org.apache.tools.ant.taskdefs;
 
 import java.io.File;
+import java.io.IOException;
 import java.util.Arrays;
 import java.util.Comparator;
 import java.util.Iterator;
@@ -771,7 +772,19 @@ public class Delete extends MatchingTask {
         }
         for (String s : list) {
             File f = new File(d, s);
-            if (f.isDirectory()) {
+
+            boolean isFsLoop = false;
+
+            try {
+                isFsLoop = SYMLINK_UTILS.isSymbolicLink(f) &&
+                    FileUtils.getFileUtils().isLeadingPath(f.getAbsoluteFile(),
+                        d.getAbsoluteFile(), true);
+            } catch (IOException e) {
+                log("Failed to check if " + f + " causes a filesystem loop due to " +
+                        "symbolic link; continuing");
+            }
+
+            if (f.isDirectory() && !isFsLoop) {
                 removeDir(f);
             } else {
                 log("Deleting " + f.getAbsolutePath(), quiet ? Project.MSG_VERBOSE : verbosity);

http://git-wip-us.apache.org/repos/asf/ant/blob/05bfffa2/src/tests/junit/org/apache/tools/ant/DirectoryScannerTest.java
----------------------------------------------------------------------
diff --git a/src/tests/junit/org/apache/tools/ant/DirectoryScannerTest.java b/src/tests/junit/org/apache/tools/ant/DirectoryScannerTest.java
index 819d4e5..2abd94f 100644
--- a/src/tests/junit/org/apache/tools/ant/DirectoryScannerTest.java
+++ b/src/tests/junit/org/apache/tools/ant/DirectoryScannerTest.java
@@ -133,6 +133,20 @@ public class DirectoryScannerTest {
     }
 
     @Test
+    public void testAllowRecursiveSymlinks() {
+
+        assumeTrue("Current system does not support Symlinks", supportsSymlinks);
+
+        buildRule.getProject().executeTarget("symlink-nested-setup");
+        DirectoryScanner ds = new DirectoryScanner();
+        ds.setBasedir(new File(buildRule.getProject().getProperty("output")));
+        ds.setIncludes(new String[] {"alpha/beta/gamma/"});
+        ds.scan();
+        compareFiles(ds, new String[] {"alpha/beta/gamma/gamma.xml"},
+            new String[] {"alpha/beta/gamma"});
+    }
+
+    @Test
     public void testProhibitSymlinks() {
         assumeTrue("Current system does not support Symlinks", supportsSymlinks);
 


[2/3] ant git commit: Record the fix for bz-62849, contributed by Michael Barker

Posted by ja...@apache.org.
Record the fix for bz-62849, contributed by Michael Barker


Project: http://git-wip-us.apache.org/repos/asf/ant/repo
Commit: http://git-wip-us.apache.org/repos/asf/ant/commit/506c3ab4
Tree: http://git-wip-us.apache.org/repos/asf/ant/tree/506c3ab4
Diff: http://git-wip-us.apache.org/repos/asf/ant/diff/506c3ab4

Branch: refs/heads/master
Commit: 506c3ab47a1d69ecff691cc535ae8368d0aeb1db
Parents: 05bfffa
Author: Jaikiran Pai <ja...@apache.org>
Authored: Sat Nov 3 17:48:47 2018 +0530
Committer: Jaikiran Pai <ja...@apache.org>
Committed: Sat Nov 3 17:48:47 2018 +0530

----------------------------------------------------------------------
 CONTRIBUTORS     | 1 +
 WHATSNEW         | 5 +++++
 contributors.xml | 4 ++++
 3 files changed, 10 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ant/blob/506c3ab4/CONTRIBUTORS
----------------------------------------------------------------------
diff --git a/CONTRIBUTORS b/CONTRIBUTORS
index 7005c75..7d4a3fd 100644
--- a/CONTRIBUTORS
+++ b/CONTRIBUTORS
@@ -263,6 +263,7 @@ Matthew Kuperus Heun
 Matthew Watson
 Matthew Yanos
 Matthias Bhend
+Michael Barker
 Michael Bayne
 Michael Clarke
 Michael Davey

http://git-wip-us.apache.org/repos/asf/ant/blob/506c3ab4/WHATSNEW
----------------------------------------------------------------------
diff --git a/WHATSNEW b/WHATSNEW
index e5bfed3..ab6d0cd 100644
--- a/WHATSNEW
+++ b/WHATSNEW
@@ -16,6 +16,11 @@ Fixed bugs:
    an incorrect compression level for a zip entry. This is now fixed.
    Bugzilla Report 62686
 
+ * A filesystem "loop" caused due to symbolic links could trigger an
+   out of memory error in the org.apache.tools.ant.DirectoryScanner
+   This has now been fixed.
+   Bugzilla Report 62849
+
 Other changes:
 --------------
  * generatekey task now supports SubjectAlternativeName during key

http://git-wip-us.apache.org/repos/asf/ant/blob/506c3ab4/contributors.xml
----------------------------------------------------------------------
diff --git a/contributors.xml b/contributors.xml
index a62b1d4..88b7a8c 100644
--- a/contributors.xml
+++ b/contributors.xml
@@ -1075,6 +1075,10 @@
   </name>
   <name>
     <first>Michael</first>
+    <last>Barker</last>
+  </name>
+  <name>
+    <first>Michael</first>
     <last>Bayne</last>
   </name>
   <name>


[3/3] ant git commit: Merge 1.9.x branch into master

Posted by ja...@apache.org.
Merge 1.9.x branch into master


Project: http://git-wip-us.apache.org/repos/asf/ant/repo
Commit: http://git-wip-us.apache.org/repos/asf/ant/commit/6c860479
Tree: http://git-wip-us.apache.org/repos/asf/ant/tree/6c860479
Diff: http://git-wip-us.apache.org/repos/asf/ant/diff/6c860479

Branch: refs/heads/master
Commit: 6c860479a13852637876aee516ed974f5736c0ee
Parents: 8efa4af 506c3ab
Author: Jaikiran Pai <ja...@apache.org>
Authored: Sat Nov 3 17:52:43 2018 +0530
Committer: Jaikiran Pai <ja...@apache.org>
Committed: Sat Nov 3 17:52:43 2018 +0530

----------------------------------------------------------------------
 CONTRIBUTORS                                         |  1 +
 WHATSNEW                                             |  5 +++++
 contributors.xml                                     |  4 ++++
 src/etc/testcases/core/directoryscanner.xml          |  5 +++++
 src/main/org/apache/tools/ant/DirectoryScanner.java  | 12 ++++++++++++
 src/main/org/apache/tools/ant/taskdefs/Delete.java   | 15 ++++++++++++++-
 .../org/apache/tools/ant/DirectoryScannerTest.java   | 14 ++++++++++++++
 7 files changed, 55 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ant/blob/6c860479/CONTRIBUTORS
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/ant/blob/6c860479/WHATSNEW
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/ant/blob/6c860479/contributors.xml
----------------------------------------------------------------------
diff --cc contributors.xml
index ebf03ee,88b7a8c..3c95e6e
--- a/contributors.xml
+++ b/contributors.xml
@@@ -1152,11 -1074,11 +1152,15 @@@
      <last>Yanos</last>
    </name>
    <name>
 +    <first>Matthias</first>
 +    <last>Bhend</last>
 +  </name>
 +  <name>
      <first>Michael</first>
+     <last>Barker</last>
+   </name>
+   <name>
+     <first>Michael</first>
      <last>Bayne</last>
    </name>
    <name>

http://git-wip-us.apache.org/repos/asf/ant/blob/6c860479/src/main/org/apache/tools/ant/DirectoryScanner.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/ant/blob/6c860479/src/main/org/apache/tools/ant/taskdefs/Delete.java
----------------------------------------------------------------------
diff --cc src/main/org/apache/tools/ant/taskdefs/Delete.java
index 22eefa1,fdddbbf..bf810e8
--- a/src/main/org/apache/tools/ant/taskdefs/Delete.java
+++ b/src/main/org/apache/tools/ant/taskdefs/Delete.java
@@@ -18,10 -18,8 +18,11 @@@
  
  package org.apache.tools.ant.taskdefs;
  
 -import java.io.File;
+ import java.io.IOException;
 +import java.io.File;
 +import java.nio.file.Files;
 +import java.nio.file.Path;
 +import java.nio.file.Paths;
  import java.util.Arrays;
  import java.util.Comparator;
  import java.util.Iterator;
@@@ -814,7 -772,19 +815,19 @@@ public class Delete extends MatchingTas
          }
          for (String s : list) {
              File f = new File(d, s);
-             if (f.isDirectory()) {
+ 
+             boolean isFsLoop = false;
+ 
+             try {
 -                isFsLoop = SYMLINK_UTILS.isSymbolicLink(f) &&
++                isFsLoop = Files.isSymbolicLink(f.toPath()) &&
+                     FileUtils.getFileUtils().isLeadingPath(f.getAbsoluteFile(),
+                         d.getAbsoluteFile(), true);
+             } catch (IOException e) {
+                 log("Failed to check if " + f + " causes a filesystem loop due to " +
+                         "symbolic link; continuing");
+             }
+ 
+             if (f.isDirectory() && !isFsLoop) {
                  removeDir(f);
              } else {
                  log("Deleting " + f.getAbsolutePath(), quiet ? Project.MSG_VERBOSE : verbosity);

http://git-wip-us.apache.org/repos/asf/ant/blob/6c860479/src/tests/junit/org/apache/tools/ant/DirectoryScannerTest.java
----------------------------------------------------------------------
diff --cc src/tests/junit/org/apache/tools/ant/DirectoryScannerTest.java
index 6dab26c,2abd94f..e332a9c
--- a/src/tests/junit/org/apache/tools/ant/DirectoryScannerTest.java
+++ b/src/tests/junit/org/apache/tools/ant/DirectoryScannerTest.java
@@@ -131,10 -133,25 +131,24 @@@ public class DirectoryScannerTest 
      }
  
      @Test
+     public void testAllowRecursiveSymlinks() {
+ 
+         assumeTrue("Current system does not support Symlinks", supportsSymlinks);
+ 
+         buildRule.getProject().executeTarget("symlink-nested-setup");
+         DirectoryScanner ds = new DirectoryScanner();
+         ds.setBasedir(new File(buildRule.getProject().getProperty("output")));
+         ds.setIncludes(new String[] {"alpha/beta/gamma/"});
+         ds.scan();
+         compareFiles(ds, new String[] {"alpha/beta/gamma/gamma.xml"},
+             new String[] {"alpha/beta/gamma"});
+     }
+ 
+     @Test
      public void testProhibitSymlinks() {
          assumeTrue("Current system does not support Symlinks", supportsSymlinks);
 -
          buildRule.getProject().executeTarget("symlink-setup");
 -        DirectoryScanner ds = new DirectoryScanner();
 +
          ds.setBasedir(new File(buildRule.getProject().getProperty("output")));
          ds.setIncludes(new String[] {"alpha/beta/gamma/"});
          ds.setFollowSymlinks(false);