On Sun, 14 Feb 2021 08:45:26 GMT, Chris Plummer <[email protected]> wrote:
> See the CR for a description of the 3 issues fixed. There's also a new test
> added. I'll explain the fix related to quoting the '!' here since it's not
> that obvious how it works.
>
> There's a complex pattern called `historyPattern` that is used to find
> various uses of ! to do expansion of commands and arguments in the history
>
> static Pattern historyPattern =
> Pattern.compile("([\\\]?)((!\*)|(!\$)|(!!-?)|(!-?[0-9][0-9]*)|(![a-zA-Z][^
> ]*))");
>
> I added the `([\\\]?)` part to handle allowing a '!' to be quoted with a
> backslash so it will just be treated as a '!' instead of being used for
> history expansion. This part of the pattern basically says match 1 backslash
> if present. Yes, you need 4 backslashes to do this. javac will reduce it to
> two, and then the pattern compilation reduces it down to just one backslash
> (not to be used for quoting).
>
> The above pattern for searching for the backslash before a '!' is in the
> first pattern grouping, and the part that matches on the '!' and what follows
> is in the 2nd pattern grouping. Thus the code I added checks if the first
> pattern grouping matches something (and at most it will match just one
> backslash), and if so then we eat it and don't treat the '!' that follows as
> a history expansion:
>
> if (m.group(1).length() != 0) {
> // This means we matched a `` before the '!'. Don't
> do any history
> // expansion in this case. Just capture what matched
> after the ``.
> result.append(m.group(2));
> continue;
> }
This pull request has now been integrated.
Changeset: 18188c2a
Author: Chris Plummer <[email protected]>
URL: https://git.openjdk.java.net/jdk/commit/18188c2a
Stats: 117 lines in 2 files changed: 114 ins; 0 del; 3 mod
8261692: Bugs in clhsdb history support
Reviewed-by: amenkov, sspitsyn
-------------
PR: https://git.openjdk.java.net/jdk/pull/2565