diff --git a/WHATSNEW b/WHATSNEW
index 17e68ca2b..2d4b6f11d 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
====================================
diff --git a/src/etc/testcases/taskdefs/pathconvert.xml b/src/etc/testcases/taskdefs/pathconvert.xml
index 1cdcc8cda..5a1cdf74b 100644
--- a/src/etc/testcases/taskdefs/pathconvert.xml
+++ b/src/etc/testcases/taskdefs/pathconvert.xml
@@ -17,6 +17,8 @@
-->
+
+
@@ -39,4 +41,20 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/main/org/apache/tools/ant/util/IdentityMapper.java b/src/main/org/apache/tools/ant/util/IdentityMapper.java
index 22c6c7eae..18a31e516 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};
}
}
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 41096b61c..f29dc12b9 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 bz-62076 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"));