8220700: jlink generated launcher script needs quoting to avoid parameter expansion
Reviewed-by: mchung, alanb, sgehwolf
This commit is contained in:
parent
444e784ce1
commit
0b625536e6
src/jdk.jlink/share/classes/jdk/tools/jlink/builder
test/jdk/tools/jlink/basic
@ -300,7 +300,7 @@ public final class DefaultImageBuilder implements ImageBuilder {
|
||||
sb.append("$DIR/java $JLINK_VM_OPTIONS -m ")
|
||||
.append(module).append('/')
|
||||
.append(mainClassName)
|
||||
.append(" $@\n");
|
||||
.append(" \"$@\"\n");
|
||||
|
||||
try (BufferedWriter writer = Files.newBufferedWriter(cmd,
|
||||
StandardCharsets.ISO_8859_1,
|
||||
|
@ -100,7 +100,6 @@ public class BasicTest {
|
||||
runJmod(classes.toString(), TEST_MODULE, true);
|
||||
runJlink(image, TEST_MODULE, "--launcher", "bar=" + TEST_MODULE);
|
||||
execute(image, "bar");
|
||||
|
||||
Files.delete(jmods.resolve(TEST_MODULE + ".jmod"));
|
||||
|
||||
image = Paths.get("myimage2");
|
||||
@ -108,7 +107,28 @@ public class BasicTest {
|
||||
// specify main class in --launcher command line
|
||||
runJlink(image, TEST_MODULE, "--launcher", "bar2=" + TEST_MODULE + "/jdk.test.Test");
|
||||
execute(image, "bar2");
|
||||
Files.delete(jmods.resolve(TEST_MODULE + ".jmod"));
|
||||
|
||||
image = Paths.get("myadder");
|
||||
runJmod(classes.toString(), TEST_MODULE, false /* no ModuleMainClass! */);
|
||||
// specify main class in --launcher command line
|
||||
runJlink(image, TEST_MODULE, "--launcher", "adder=" + TEST_MODULE + "/jdk.test.Adder");
|
||||
addAndCheck(image, "adder");
|
||||
}
|
||||
|
||||
private void addAndCheck(Path image, String scriptName) throws Throwable {
|
||||
String cmd = image.resolve("bin").resolve(scriptName).toString();
|
||||
OutputAnalyzer analyzer;
|
||||
if (System.getProperty("os.name").startsWith("Windows")) {
|
||||
analyzer = ProcessTools.executeProcess("sh.exe", cmd, "12", "8", "7", "--", "foo bar");
|
||||
} else {
|
||||
analyzer = ProcessTools.executeProcess(cmd, "12", "8", "7", "--", "foo bar");
|
||||
}
|
||||
if (analyzer.getExitValue() != 27) {
|
||||
throw new AssertionError("Image invocation failed: expected 27, rc=" + analyzer.getExitValue());
|
||||
}
|
||||
// last argument contains space and should be properly quoted.
|
||||
analyzer.stdoutShouldContain("Num args: 5");
|
||||
}
|
||||
|
||||
private void execute(Path image, String scriptName) throws Throwable {
|
||||
|
45
test/jdk/tools/jlink/basic/src/test/jdk/test/Adder.java
Normal file
45
test/jdk/tools/jlink/basic/src/test/jdk/test/Adder.java
Normal file
@ -0,0 +1,45 @@
|
||||
/**
|
||||
* Copyright (c) 2019, Oracle and/or its affiliates. All rights reserved.
|
||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
*
|
||||
* This code is free software; you can redistribute it and/or modify it
|
||||
* under the terms of the GNU General Public License version 2 only, as
|
||||
* published by the Free Software Foundation.
|
||||
*
|
||||
* This code is distributed in the hope that it will be useful, but WITHOUT
|
||||
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
|
||||
* version 2 for more details (a copy is included in the LICENSE file that
|
||||
* accompanied this code).
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License version
|
||||
* 2 along with this work; if not, write to the Free Software Foundation,
|
||||
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||
*
|
||||
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
|
||||
* or visit www.oracle.com if you need additional information or have any
|
||||
* questions.
|
||||
*/
|
||||
|
||||
package jdk.test;
|
||||
|
||||
import java.util.Arrays;
|
||||
|
||||
public class Adder {
|
||||
public static void main(String[] args) {
|
||||
System.out.println(Adder.class + " ...");
|
||||
System.out.println("Num args: " + args.length);
|
||||
System.out.println("args list: " + Arrays.asList(args));
|
||||
int sum = 0;
|
||||
// Only add arguments upto "--". The remaining argument(s) are for
|
||||
// testing quoting.
|
||||
for (String arg: args) {
|
||||
System.out.println(arg);
|
||||
if ("--".equals(arg)) {
|
||||
break;
|
||||
}
|
||||
sum += Integer.parseInt(arg);
|
||||
}
|
||||
System.exit(sum); // checked by the test
|
||||
}
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user