< 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 >