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);