Skip to content

Commit 7efd6d0

Browse files
committed
bz-64912, bz-64790 Fix regression in javac task when using arguments file
1 parent 05596f1 commit 7efd6d0

File tree

5 files changed

+33
-1
lines changed

5 files changed

+33
-1
lines changed

CONTRIBUTORS

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -427,6 +427,7 @@ Tim Stephenson
427427
Tim Whittington
428428
Timoteo Ohara
429429
Timothy Gerard Endres
430+
TJ Rothwell
430431
Tom Ball
431432
Tom Brus
432433
Tom Cunningham

WHATSNEW

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,10 @@ Fixed bugs:
77
* SCP (with sftp=true) task would fail if fetching file located in root directory
88
Bugzilla Report 64742
99

10+
* javac task would fail if the arguments file it (internally) created didn't quote
11+
the # character. This has now been fixed.
12+
Bugzilla Reports 64912, 64790
13+
1014
Other changes:
1115
--------------
1216

contributors.xml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1760,6 +1760,10 @@
17601760
<middle>Gerard</middle>
17611761
<last>Endres</last>
17621762
</name>
1763+
<name>
1764+
<first>TJ</first>
1765+
<last>Rothwell</last>
1766+
</name>
17631767
<name>
17641768
<first>Tom</first>
17651769
<last>Ball</last>

src/main/org/apache/tools/ant/taskdefs/compilers/DefaultCompilerAdapter.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
import java.io.FileWriter;
2424
import java.io.IOException;
2525
import java.util.Optional;
26+
import java.util.regex.Pattern;
2627
import java.util.stream.Collectors;
2728
import java.util.stream.Stream;
2829

@@ -67,6 +68,8 @@ public abstract class DefaultCompilerAdapter
6768
protected static final String lSep = StringUtils.LINE_SEP;
6869
// CheckStyle:ConstantNameCheck ON
6970

71+
private static final Pattern JAVAC_ARG_FILE_CHARS_TO_QUOTE = Pattern.compile("[ #]"); // space or # character
72+
7073
protected Path src;
7174
protected File destDir;
7275
protected String encoding;
@@ -549,7 +552,7 @@ protected int executeExternalCompile(final String[] args, final int firstFileNam
549552
try (BufferedWriter out =
550553
new BufferedWriter(new FileWriter(tmpFile))) {
551554
for (int i = firstFileName; i < args.length; i++) {
552-
if (quoteFiles && args[i].contains(" ")) {
555+
if (quoteFiles && JAVAC_ARG_FILE_CHARS_TO_QUOTE.matcher(args[i]).find()) {
553556
args[i] =
554557
args[i].replace(File.separatorChar, '/');
555558
out.write("\"" + args[i] + "\"");

src/tests/antunit/taskdefs/javac-test.xml

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -193,6 +193,26 @@ public class Adapter implements CompilerAdapter {
193193
<au:assertLogContains text="adapter called" />
194194
</target>
195195

196+
<target name="testSpaceCharInArgs" depends="setup" description="https://bz.apache.org/bugzilla/show_bug.cgi?id=64912">
197+
<delete dir="${javac-dir}/src" />
198+
<mkdir dir="${javac-dir}/src" />
199+
<echo file="${javac-dir}/src/Foo.java">
200+
public class Foo { }
201+
</echo>
202+
<mkdir dir="${output}/foo with space bar" />
203+
<javac srcdir="${javac-dir}/src" destdir="${output}/foo with space bar" fork="yes" failOnError="true"/>
204+
</target>
205+
206+
<target name="test#CharInArgs" depends="setup" description="https://bz.apache.org/bugzilla/show_bug.cgi?id=64912">
207+
<delete dir="${javac-dir}/src" />
208+
<mkdir dir="${javac-dir}/src" />
209+
<echo file="${javac-dir}/src/Foo.java">
210+
public class Foo { }
211+
</echo>
212+
<mkdir dir="${output}/foo#bar" />
213+
<javac srcdir="${javac-dir}/src" destdir="${output}/foo#bar" fork="yes" failOnError="true"/>
214+
</target>
215+
196216
<target name="testCompilerAsNestedElement" depends="-create-javac-adapter">
197217
<componentdef classname="org.example.Adapter" name="myjavac">
198218
<classpath location="${resources}" />

0 commit comments

Comments
 (0)