Replace reluctant quantifier `*?` with the possessive alternative (`*+`) and 
get rid of back-references from the regexp tokenizing a value of the 
"--arguments" option into a string array to fix the catastrophic backtracking 
resulting in a stack overflow.

Old regexp: `(?:(?:(["'])(?:\\\1|.)*?(?:\1|$))|(?:\["'\s]|[^\s]))++`

New regexp 
`(?:(?:(?:'(?:\'|[^'])*+(?:'|$))|(?:"(?:\"|[^"])*+(?:"|$)))|(?:\["'\s]|\S))++`

Add test cases that pass both the old and the new variants of the regexp, 
except for the last test case that causes a stack overflow with the old regexp.

The initial intention was to replace the regexp with the tokenizer function. It 
was abandoned in favor of reworking the regexp to minimize the risk of 
regressions.

-------------

Commit messages:
 - 8373448: jpackage: StackOverflowError when processing a very long argument

Changes: https://git.openjdk.org/jdk/pull/29104/files
  Webrev: https://webrevs.openjdk.org/?repo=jdk&pr=29104&range=00
  Issue: https://bugs.openjdk.org/browse/JDK-8373448
  Stats: 44 lines in 2 files changed: 39 ins; 0 del; 5 mod
  Patch: https://git.openjdk.org/jdk/pull/29104.diff
  Fetch: git fetch https://git.openjdk.org/jdk.git pull/29104/head:pull/29104

PR: https://git.openjdk.org/jdk/pull/29104

Reply via email to