Browse Source

explicitly guard against nul values, mark to and from attributes as required. PR 44790.

git-svn-id: https://svn.apache.org/repos/asf/ant/core/trunk@684721 13f79535-47bb-0310-9956-ffa450edef68
master
Stefan Bodewig 17 years ago
parent
commit
3f609f9775
3 changed files with 22 additions and 2 deletions
  1. +4
    -2
      docs/manual/CoreTypes/mapper.html
  2. +10
    -0
      src/main/org/apache/tools/ant/util/GlobPatternMapper.java
  3. +8
    -0
      src/main/org/apache/tools/ant/util/RegexpPatternMapper.java

+ 4
- 2
docs/manual/CoreTypes/mapper.html View File

@@ -221,7 +221,7 @@ leading directory information stripped off. Both <code>to</code> and
<!-- --> <!-- -->


<h4><a name="glob-mapper">glob</a></h4> <h4><a name="glob-mapper">glob</a></h4>
<p>Both <code>to</code> and <code>from</code> define patterns that may
<p>Both <code>to</code> and <code>from</code> are required and define patterns that may
contain at most one <code>*</code>. For each source file that matches contain at most one <code>*</code>. For each source file that matches
the <code>from</code> pattern, a target file name will be constructed the <code>from</code> pattern, a target file name will be constructed
from the <code>to</code> pattern by substituting the <code>*</code> in from the <code>to</code> pattern by substituting the <code>*</code> in
@@ -350,7 +350,7 @@ that don't match the <code>from</code> pattern will be ignored.</p>
<!-- --> <!-- -->


<h4><a name="regexp-mapper">regexp</a></h4> <h4><a name="regexp-mapper">regexp</a></h4>
<p>Both <code>to</code> and <code>from</code> define regular
<p>Both <code>to</code> and <code>from</code> are required and define regular
expressions. If the source file name matches the <code>from</code> expressions. If the source file name matches the <code>from</code>
pattern, the target file name will be constructed from the pattern, the target file name will be constructed from the
<code>to</code> pattern, using <code>\0</code> to <code>\9</code> as <code>to</code> pattern, using <code>\0</code> to <code>\9</code> as
@@ -571,6 +571,7 @@ the package mapper replaces
directory separators found in the matched source pattern with dots in the target directory separators found in the matched source pattern with dots in the target
pattern placeholder. This mapper is particularly useful in combination pattern placeholder. This mapper is particularly useful in combination
with <code>&lt;uptodate&gt;</code> and <code>&lt;junit&gt;</code> output.</p> with <code>&lt;uptodate&gt;</code> and <code>&lt;junit&gt;</code> output.</p>
<p>The to and from attributes are both required.</p>
<b>Example:</b> <b>Example:</b>
<blockquote><pre> <blockquote><pre>
&lt;mapper type="package" from="*Test.java" to="TEST-*Test.xml"/&gt; &lt;mapper type="package" from="*Test.java" to="TEST-*Test.xml"/&gt;
@@ -602,6 +603,7 @@ with <code>&lt;uptodate&gt;</code> and <code>&lt;junit&gt;</code> output.</p>
test cases. The mapper shares the sample syntax test cases. The mapper shares the sample syntax
as the <a href="#glob-mapper">glob mapper</a>. as the <a href="#glob-mapper">glob mapper</a>.
</p> </p>
<p>The to and from attributes are both required.</p>
<b>Example:</b> <b>Example:</b>
<blockquote><pre> <blockquote><pre>
&lt;mapper type="unpackage" from="TEST-*Test.xml" to="${test.src.dir}/*Test.java"&gt; &lt;mapper type="unpackage" from="TEST-*Test.xml" to="${test.src.dir}/*Test.java"&gt;


+ 10
- 0
src/main/org/apache/tools/ant/util/GlobPatternMapper.java View File

@@ -18,6 +18,8 @@


package org.apache.tools.ant.util; package org.apache.tools.ant.util;


import org.apache.tools.ant.BuildException;

/** /**
* Implementation of FileNameMapper that does simple wildcard pattern * Implementation of FileNameMapper that does simple wildcard pattern
* replacements. * replacements.
@@ -95,6 +97,7 @@ public class GlobPatternMapper implements FileNameMapper {
* @param from a string * @param from a string
*/ */
public void setFrom(String from) { public void setFrom(String from) {
if (from != null) {
int index = from.lastIndexOf("*"); int index = from.lastIndexOf("*");
if (index == -1) { if (index == -1) {
fromPrefix = from; fromPrefix = from;
@@ -105,6 +108,9 @@ public class GlobPatternMapper implements FileNameMapper {
} }
prefixLength = fromPrefix.length(); prefixLength = fromPrefix.length();
postfixLength = fromPostfix.length(); postfixLength = fromPostfix.length();
} else {
throw new BuildException("this mapper requires a 'from' attribute");
}
} }


/** /**
@@ -112,6 +118,7 @@ public class GlobPatternMapper implements FileNameMapper {
* @param to a string * @param to a string
*/ */
public void setTo(String to) { public void setTo(String to) {
if (to != null) {
int index = to.lastIndexOf("*"); int index = to.lastIndexOf("*");
if (index == -1) { if (index == -1) {
toPrefix = to; toPrefix = to;
@@ -120,6 +127,9 @@ public class GlobPatternMapper implements FileNameMapper {
toPrefix = to.substring(0, index); toPrefix = to.substring(0, index);
toPostfix = to.substring(index + 1); toPostfix = to.substring(index + 1);
} }
} else {
throw new BuildException("this mapper requires a 'to' attribute");
}
} }


/** /**


+ 8
- 0
src/main/org/apache/tools/ant/util/RegexpPatternMapper.java View File

@@ -80,6 +80,7 @@ public class RegexpPatternMapper implements FileNameMapper {
* @throws BuildException on error. * @throws BuildException on error.
*/ */
public void setFrom(String from) throws BuildException { public void setFrom(String from) throws BuildException {
if (from != null) {
try { try {
reg.setPattern(from); reg.setPattern(from);
} catch (NoClassDefFoundError e) { } catch (NoClassDefFoundError e) {
@@ -88,6 +89,9 @@ public class RegexpPatternMapper implements FileNameMapper {
throw new BuildException("Cannot load regular expression matcher", throw new BuildException("Cannot load regular expression matcher",
e); e);
} }
} else {
throw new BuildException("this mapper requires a 'from' attribute");
}
} }


/** /**
@@ -96,7 +100,11 @@ public class RegexpPatternMapper implements FileNameMapper {
* @throws BuildException on error. * @throws BuildException on error.
*/ */
public void setTo(String to) { public void setTo(String to) {
if (to != null) {
this.to = to.toCharArray(); this.to = to.toCharArray();
} else {
throw new BuildException("this mapper requires a 'to' attribute");
}
} }


/** /**


Loading…
Cancel
Save