Bugs item #1250262, was opened at 2005-08-02 14:06
Message generated for change (Settings changed) made by mattinger
You can respond by visiting:
https://sourceforge.net/tracker/?func=detail&atid=416920&aid=1250262&group_id=36177
Please note that this message will contain a full copy of the comment thread,
including the initial issue submission, for this request,
not just the latest update.
Category: process
Group: None
Status: Open
Resolution: None
Priority: 5
Submitted By: Nobody/Anonymous (nobody)
>Assigned to: Matt Inger (mattinger)
Summary: PropertyRegex throws StringIndexOutOfBoundsException
Initial Comment:
I'm using the following declaration to convert package
name to path:
<propertyregex
property="pkg.path"
input="${pkg}"
regexp="[\.]"
replace="${file.separator}"
global="true"
casesensitive="false"
/>
When running on MS Windows (XP, Ant v 1.6.5) it throws
a StringIndexOutOfBoundsException with following stack
trace.
java.lang.StringIndexOutOfBoundsException: String index
out of range
: 1
at org.apache.tools.ant.Task.perform(Task.java:373)
at
org.apache.tools.ant.Target.execute(Target.java:341)
at
org.apache.tools.ant.Target.performTasks(Target.java:369)
at
org.apache.tools.ant.Project.executeSortedTargets(Project.java:1216)
at
org.apache.tools.ant.Project.executeTarget(Project.java:1185)
at
org.apache.tools.ant.helper.DefaultExecutor.executeTargets(DefaultExecutor.java:40)
at
org.apache.tools.ant.Project.executeTargets(Project.java:1068)
at
org.apache.tools.ant.Main.runBuild(Main.java:668)
at
org.apache.tools.ant.Main.startAnt(Main.java:187)
at
org.apache.tools.ant.launch.Launcher.run(Launcher.java:246)
at
org.apache.tools.ant.launch.Launcher.main(Launcher.java:67)
Caused by: java.lang.StringIndexOutOfBoundsException:
String index out of range: 1
at java.lang.String.charAt(String.java:444)
at
java.util.regex.Matcher.appendReplacement(Matcher.java:551)
at
java.util.regex.Matcher.replaceAll(Matcher.java:661)
at
org.apache.tools.ant.util.regexp.Jdk14RegexpRegexp.substitute(Jdk14RegexpRegexp.java:91)
at
net.sf.antcontrib.property.RegexTask.doReplace(RegexTask.java:136)
at
net.sf.antcontrib.property.RegexTask.execute(RegexTask.java:190)
at
org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:275)
at org.apache.tools.ant.Task.perform(Task.java:364)
... 10 more
--- Nested Exception ---
java.lang.StringIndexOutOfBoundsException: String index
out of range: 1
at java.lang.String.charAt(String.java:444)
at
java.util.regex.Matcher.appendReplacement(Matcher.java:551)
at
java.util.regex.Matcher.replaceAll(Matcher.java:661)
at
org.apache.tools.ant.util.regexp.Jdk14RegexpRegexp.substitute(Jdk14RegexpRegexp.java:91)
at
net.sf.antcontrib.property.RegexTask.doReplace(RegexTask.java:136)
at
net.sf.antcontrib.property.RegexTask.execute(RegexTask.java:190)
at
org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:275)
at org.apache.tools.ant.Task.perform(Task.java:364)
at
org.apache.tools.ant.Target.execute(Target.java:341)
at
org.apache.tools.ant.Target.performTasks(Target.java:369)
at
org.apache.tools.ant.Project.executeSortedTargets(Project.java:1216)
at
org.apache.tools.ant.Project.executeTarget(Project.java:1185)
at
org.apache.tools.ant.helper.DefaultExecutor.executeTargets(DefaultExecutor.java:40)
at
org.apache.tools.ant.Project.executeTargets(Project.java:1068)
at
org.apache.tools.ant.Main.runBuild(Main.java:668)
at
org.apache.tools.ant.Main.startAnt(Main.java:187)
at
org.apache.tools.ant.launch.Launcher.run(Launcher.java:246)
at
org.apache.tools.ant.launch.Launcher.main(Launcher.java:67)
----------------------------------------------------------------------
Comment By: Matt Inger (mattinger)
Date: 2005-08-03 19:11
Message:
Logged In: YES
user_id=83032
On second thought, that would preclude us from having real
escape characters in substitution strings. Just use the
workaround.
----------------------------------------------------------------------
Comment By: Matt Inger (mattinger)
Date: 2005-08-03 19:10
Message:
Logged In: YES
user_id=83032
OK. I looked at the ANT code, and this is bug in the JDK14
regular expression wrapper for the ANT datatype for regular
expression. The solution is that we modify the substitution
string before performing the substitution so that any \
characters are replaced with \\, since a single \ is an escape
character for substitutions.
----------------------------------------------------------------------
Comment By: Matt Inger (mattinger)
Date: 2005-08-03 18:45
Message:
Logged In: YES
user_id=83032
This is an issue with the regular expression package in ANT.
It does not provide a way to escape the "\" character in an
independent way. Different implementations of regular
expression subsititution use either \ or $ as the group
indicator, and not all implementations allow you to esacpe
the backslash.
I suggest in the mean time that you use / and normalize the
path with the <pathconvert> task.
I'll look into this more, but at this point, i think we just have to
live with it.
----------------------------------------------------------------------
You can respond by visiting:
https://sourceforge.net/tracker/?func=detail&atid=416920&aid=1250262&group_id=36177
|