< prev index next >
test/jdk/tools/launcher/ArgFileSyntax.java
Print this page
rev 51884 : 8210810: Escaped character at specific position in argument file is not handled properly
Contributed-by: Bo Zhang <zhangbodut@gmail.com>
Reviewed-by: henryjen
*** 38,47 ****
--- 38,50 ----
import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class ArgFileSyntax extends TestHelper {
+ // Buffer size in args.c readArgFile() method
+ private static final int ARG_FILE_PARSER_BUF_SIZE = 4096;
+
private File createArgFile(List<String> lines) throws IOException {
File argFile = new File("argfile");
argFile.delete();
createAFile(argFile, lines);
return argFile;
*** 184,208 ****
// long lines
String bag = "-Dgarbage=";
String ver = "-version";
// a token 8192 long
! char[] data = new char[8192 - bag.length()];
Arrays.fill(data, 'O');
List<String> scratch = new ArrayList<>();
scratch.add("-Xmx32m");
scratch.add(bag + String.valueOf(data));
scratch.add(ver);
rv.add(Collections.nCopies(2, scratch));
! data = new char[8192 + 1024];
Arrays.fill(data, 'O');
scratch = new ArrayList<>();
scratch.add(bag + String.valueOf(data));
scratch.add(ver);
rv.add(Collections.nCopies(2, scratch));
return rv;
}
// ensure the arguments in the file are read in correctly
private void verifyParsing(List<String> lines, List<String> args) throws IOException {
--- 187,221 ----
// long lines
String bag = "-Dgarbage=";
String ver = "-version";
// a token 8192 long
! char[] data = new char[2*ARG_FILE_PARSER_BUF_SIZE - bag.length()];
Arrays.fill(data, 'O');
List<String> scratch = new ArrayList<>();
scratch.add("-Xmx32m");
scratch.add(bag + String.valueOf(data));
scratch.add(ver);
rv.add(Collections.nCopies(2, scratch));
! data = new char[2*ARG_FILE_PARSER_BUF_SIZE + 1024];
Arrays.fill(data, 'O');
scratch = new ArrayList<>();
scratch.add(bag + String.valueOf(data));
scratch.add(ver);
rv.add(Collections.nCopies(2, scratch));
+ // 8210810: position escaping character at boundary
+ // reserve space for quote and backslash
+ data = new char[ARG_FILE_PARSER_BUF_SIZE - bag.length() - 2];
+ Arrays.fill(data, 'O');
+ scratch = new ArrayList<>();
+ String filling = String.valueOf(data);
+ scratch.add(bag + "'" + filling + "\\\\aaa\\\\'");
+ scratch.add(ver);
+ rv.add(List.of(scratch, List.of(bag + filling + "\\aaa\\", ver)));
+
return rv;
}
// ensure the arguments in the file are read in correctly
private void verifyParsing(List<String> lines, List<String> args) throws IOException {
< prev index next >