From 4e2a4f9c9507b19b248548ec6333698af3c1a4b8 Mon Sep 17 00:00:00 2001 From: Peter Reilly Date: Wed, 28 May 2003 15:31:07 +0000 Subject: [PATCH] fix for bug 20306 - regex handling of $ in replace string git-svn-id: https://svn.apache.org/repos/asf/ant/core/trunk@274633 13f79535-47bb-0310-9956-ffa450edef68 --- src/etc/testcases/filters/tokenfilter.xml | 9 +++++++++ .../apache/tools/ant/util/regexp/JakartaOroRegexp.java | 5 ++++- .../apache/tools/ant/util/regexp/Jdk14RegexpRegexp.java | 5 ++++- .../org/apache/tools/ant/filters/TokenFilterTest.java | 8 +++++++- 4 files changed, 24 insertions(+), 3 deletions(-) diff --git a/src/etc/testcases/filters/tokenfilter.xml b/src/etc/testcases/filters/tokenfilter.xml index 451d7044e..ddfa57eba 100644 --- a/src/etc/testcases/filters/tokenfilter.xml +++ b/src/etc/testcases/filters/tokenfilter.xml @@ -181,6 +181,15 @@ + + + @hello@ + + + + + + diff --git a/src/main/org/apache/tools/ant/util/regexp/JakartaOroRegexp.java b/src/main/org/apache/tools/ant/util/regexp/JakartaOroRegexp.java index 822ff67d0..84b19898d 100644 --- a/src/main/org/apache/tools/ant/util/regexp/JakartaOroRegexp.java +++ b/src/main/org/apache/tools/ant/util/regexp/JakartaOroRegexp.java @@ -76,7 +76,10 @@ public class JakartaOroRegexp extends JakartaOroMatcher implements Regexp { StringBuffer subst = new StringBuffer(); for (int i = 0; i < argument.length(); i++) { char c = argument.charAt(i); - if (c == '\\') { + if (c == '$') { + subst.append('\\'); + subst.append('$'); + } else if (c == '\\') { if (++i < argument.length()) { c = argument.charAt(i); int value = Character.digit(c, 10); diff --git a/src/main/org/apache/tools/ant/util/regexp/Jdk14RegexpRegexp.java b/src/main/org/apache/tools/ant/util/regexp/Jdk14RegexpRegexp.java index 5bb120c06..a58a73cf9 100644 --- a/src/main/org/apache/tools/ant/util/regexp/Jdk14RegexpRegexp.java +++ b/src/main/org/apache/tools/ant/util/regexp/Jdk14RegexpRegexp.java @@ -83,7 +83,10 @@ public class Jdk14RegexpRegexp extends Jdk14RegexpMatcher implements Regexp { StringBuffer subst = new StringBuffer(); for (int i = 0; i < argument.length(); i++) { char c = argument.charAt(i); - if (c == '\\') { + if (c == '$') { + subst.append('\\'); + subst.append('$'); + } else if (c == '\\') { if (++i < argument.length()) { c = argument.charAt(i); int value = Character.digit(c, 10); diff --git a/src/testcases/org/apache/tools/ant/filters/TokenFilterTest.java b/src/testcases/org/apache/tools/ant/filters/TokenFilterTest.java index 2472a5b97..e8461b41d 100644 --- a/src/testcases/org/apache/tools/ant/filters/TokenFilterTest.java +++ b/src/testcases/org/apache/tools/ant/filters/TokenFilterTest.java @@ -77,7 +77,7 @@ public class TokenFilterTest extends BuildFileTest { } public void tearDown() { - //executeTarget("cleanup"); + executeTarget("cleanup"); } /** make sure tokenfilter exists */ @@ -147,6 +147,12 @@ public class TokenFilterTest extends BuildFileTest { assertStringContains(contents, "world world world world"); } + public void testHandleDollerMatch() throws IOException { + if (! hasRegex("testFilterReplaceRegex")) + return; + executeTarget("dollermatch"); + } + public void testTrimFile() throws IOException { String contents = getFileString( "trimfile", "result/trimfile");