On Fri, 9 Jan 2026 00:21:32 GMT, Alexander Matveev <[email protected]> wrote:
>> 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.
>
> src/jdk.jpackage/share/classes/jdk/jpackage/internal/cli/StandardOption.java
> line 744:
>
>> 742:
>> 743: static {
>> 744: System.out.println("OLD: " + pattern);
>
> Why we need to print old and new pattern? Looks like debug code was not
> removed.
Oh, the debug output slipped in.
-------------
PR Review Comment: https://git.openjdk.org/jdk/pull/29104#discussion_r2674369242