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/02/09 07:15:20 UTC

[2/3] ant git commit: bz-62076 Make IdentityMapper follow the "mapFileName" API contract to avoid NPE when it deals with a non-matching source file name

bz-62076 Make IdentityMapper follow the "mapFileName" API contract to avoid NPE when it deals with a non-matching source file name


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

Branch: refs/heads/master
Commit: e3f5250916dc0d9493b45b2d8fc6efe3a0fd9fda
Parents: a6429c6
Author: Jaikiran Pai <ja...@apache.org>
Authored: Fri Feb 9 12:36:54 2018 +0530
Committer: Jaikiran Pai <ja...@apache.org>
Committed: Fri Feb 9 12:36:54 2018 +0530

----------------------------------------------------------------------
 WHATSNEW                                          |  7 +++++++
 src/etc/testcases/taskdefs/pathconvert.xml        | 18 ++++++++++++++++++
 .../org/apache/tools/ant/util/IdentityMapper.java | 11 ++++++++++-
 .../tools/ant/taskdefs/PathConvertTest.java       | 11 +++++++++++
 4 files changed, 46 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ant/blob/e3f52509/WHATSNEW
----------------------------------------------------------------------
diff --git a/WHATSNEW b/WHATSNEW
index 17e68ca..2d4b6f1 100644
--- a/WHATSNEW
+++ b/WHATSNEW
@@ -1,6 +1,13 @@
 Changes from Ant 1.9.10 TO Ant 1.9.11
 =====================================
 
+Fixed bugs:
+-----------
+
+ * Fixed NullPointerException when a mappedresource is used in pathconvert
+   Bugzilla Report 62076
+
+
 Changes from Ant 1.9.9 TO Ant 1.9.10
 ====================================
 

http://git-wip-us.apache.org/repos/asf/ant/blob/e3f52509/src/etc/testcases/taskdefs/pathconvert.xml
----------------------------------------------------------------------
diff --git a/src/etc/testcases/taskdefs/pathconvert.xml b/src/etc/testcases/taskdefs/pathconvert.xml
index 1cdcc8c..5a1cdf7 100644
--- a/src/etc/testcases/taskdefs/pathconvert.xml
+++ b/src/etc/testcases/taskdefs/pathconvert.xml
@@ -17,6 +17,8 @@
 -->
 <project name="pathconvert">
 
+    <import file="../buildfiletest-base.xml"/>
+
     <path id="testpath">
         <pathelement path="${ant.file}" />
     </path>
@@ -39,4 +41,20 @@
         <pathconvert property="result" refid="testpath" />
     </target>
 
+    <target name="test-nonmatching-mapper" description="test for bug fix bz-62076">
+        <mkdir dir="${output}/mapper-source-dir"/>
+        <!-- create 2 files, one of which will be matched/included by the globmapper
+        later in this target -->
+        <touch file="${output}/mapper-source-dir/file1.txt"/>
+        <touch file="${output}/mapper-source-dir/file2.log"/>
+
+        <pathconvert property="pc">
+            <mappedresources>
+                <fileset dir="${output}/mapper-source-dir"/>
+                <!-- we intentionally exclude one of the files -->
+                <globmapper from="*.log" to="*.txt"/>
+            </mappedresources>
+        </pathconvert>
+    </target>
+
 </project>

http://git-wip-us.apache.org/repos/asf/ant/blob/e3f52509/src/main/org/apache/tools/ant/util/IdentityMapper.java
----------------------------------------------------------------------
diff --git a/src/main/org/apache/tools/ant/util/IdentityMapper.java b/src/main/org/apache/tools/ant/util/IdentityMapper.java
index 22c6c7e..18a31e5 100644
--- a/src/main/org/apache/tools/ant/util/IdentityMapper.java
+++ b/src/main/org/apache/tools/ant/util/IdentityMapper.java
@@ -46,7 +46,16 @@ public class IdentityMapper implements FileNameMapper {
      * @param sourceFileName the name to map.
      * @return the source filename in a one-element array.
      */
-    public String[] mapFileName(String sourceFileName) {
+    @Override
+    public String[] mapFileName(final String sourceFileName) {
+        if (sourceFileName == null) {
+            // The FileNameMapper#mapFileName contract states that:
+            // "if the given rule doesn't apply to the source file,
+            //  implementation must return null"
+            // we consider a null source file name as non-matching and
+            // hence return null
+            return null;
+        }
         return new String[] {sourceFileName};
     }
 }

http://git-wip-us.apache.org/repos/asf/ant/blob/e3f52509/src/tests/junit/org/apache/tools/ant/taskdefs/PathConvertTest.java
----------------------------------------------------------------------
diff --git a/src/tests/junit/org/apache/tools/ant/taskdefs/PathConvertTest.java b/src/tests/junit/org/apache/tools/ant/taskdefs/PathConvertTest.java
index 41096b6..f29dc12 100644
--- a/src/tests/junit/org/apache/tools/ant/taskdefs/PathConvertTest.java
+++ b/src/tests/junit/org/apache/tools/ant/taskdefs/PathConvertTest.java
@@ -57,6 +57,17 @@ public class PathConvertTest {
         buildRule.executeTarget("testnotargetos");
     }
 
+    /**
+     * Tests that if a {@code mappedresource}, that excludes certain resources, is used in a {@code pathconvert},
+     * then it doesn't lead to a {@link NullPointerException}.
+     *
+     * @see <a href="https://bz.apache.org/bugzilla/show_bug.cgi?id=62076">bz-62076</a> for more details
+     */
+    @Test
+    public void testNonMatchingMapper() {
+        buildRule.executeTarget("test-nonmatching-mapper");
+    }
+
     private void test(String target) {
         buildRule.executeTarget(target);
         assertEquals("test#" + BUILD_FILENAME, buildRule.getProject().getProperty("result"));