diff --git a/src/main/org/apache/tools/ant/util/FileUtils.java b/src/main/org/apache/tools/ant/util/FileUtils.java index e860a9ff6..45e6c8490 100644 --- a/src/main/org/apache/tools/ant/util/FileUtils.java +++ b/src/main/org/apache/tools/ant/util/FileUtils.java @@ -1186,10 +1186,12 @@ public class FileUtils { return ""; } - // if leading's path ends with a slash, it will be stripped by - // normalize - we always add one so we never think /foo was a - // parent directory of /foobar - l += File.separator; + // ensure that l ends with a / + // so we never think /foo was a parent directory of /foobar + if (!l.endsWith("/")) { + l += File.separator; + } + if (p.startsWith(l)) { return p.substring(l.length()); } else { diff --git a/src/testcases/org/apache/tools/ant/util/FileUtilsTest.java b/src/testcases/org/apache/tools/ant/util/FileUtilsTest.java index 763e5fb26..340d11cbf 100644 --- a/src/testcases/org/apache/tools/ant/util/FileUtilsTest.java +++ b/src/testcases/org/apache/tools/ant/util/FileUtilsTest.java @@ -421,6 +421,15 @@ public class FileUtilsTest extends TestCase { new File("/foo/bar/"))); assertEquals("", fu.removeLeadingPath(new File("/foo/bar/"), new File("/foo/bar"))); + + String expected = "foo/bar".replace('\\', File.separatorChar) + .replace('/', File.separatorChar); + assertEquals(expected, fu.removeLeadingPath(new File("/"), + new File("/foo/bar"))); + assertEquals(expected, fu.removeLeadingPath(new File("c:/"), + new File("c:/foo/bar"))); + assertEquals(expected, fu.removeLeadingPath(new File("c:\\"), + new File("c:\\foo\\bar"))); } /**