Browse Source

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

master
Jaikiran Pai 7 years ago
parent
commit
e3f5250916
4 changed files with 46 additions and 1 deletions
  1. +7
    -0
      WHATSNEW
  2. +18
    -0
      src/etc/testcases/taskdefs/pathconvert.xml
  3. +10
    -1
      src/main/org/apache/tools/ant/util/IdentityMapper.java
  4. +11
    -0
      src/tests/junit/org/apache/tools/ant/taskdefs/PathConvertTest.java

+ 7
- 0
WHATSNEW View File

@@ -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
====================================



+ 18
- 0
src/etc/testcases/taskdefs/pathconvert.xml View File

@@ -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>

+ 10
- 1
src/main/org/apache/tools/ant/util/IdentityMapper.java View File

@@ -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};
}
}

+ 11
- 0
src/tests/junit/org/apache/tools/ant/taskdefs/PathConvertTest.java View File

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


Loading…
Cancel
Save