Hi David,
good point, parseArguments (or rather checkOption) does indeed validate that
passed option is valid and has a valid value, yet for many options all values
are treated as valid, so ill-formed command lines like
`-debugee.vmkeys="${test.vm.opts} ${test.java.opts} -transport.address=dynamic`
won't be spotted by ArgumentParser and its sub-classes, and I'm afraid in some
cases might change tests' behavior unnoticeably. thus I've decided to add the
check that we always have even number of double quotes:
> diff -r 83f273f313aa
> test/hotspot/jtreg/vmTestbase/nsk/share/ArgumentParser.java
> --- a/test/hotspot/jtreg/vmTestbase/nsk/share/ArgumentParser.java Thu
> Aug 27 19:37:51 2020 -0700
> +++ b/test/hotspot/jtreg/vmTestbase/nsk/share/ArgumentParser.java Fri
> Aug 28 11:16:24 2020 -0700
> @@ -156,6 +156,10 @@
> arg.append(" ").append(args[++i]);
> doubleQuotes += numberOfDoubleQuotes(args[i]);
> }
> + if (doubleQuotes % 2 != 0) {
> + throw new TestBug("command-line has odd number of double
> quotes:" + String.join(" ", args));
> + }
> +
> list.add(arg.toString());
> }
> setRawArguments(list.toArray(String[]::new));
Thanks,
-- Igor
> On Aug 27, 2020, at 9:09 PM, David Holmes <[email protected]> wrote:
>
> Hi Igor,
>
> In case there may be a parsing error and the command-line is ill-formed,
> should you abort if you reach the end of the arg list without finding an even
> number of double-quotes? Or will parseArguments already handle that?
>
> Otherwise the changes seem good.
>
> Thanks,
> David
> -----
>
> On 28/08/2020 12:39 pm, Igor Ignatyev wrote:
>> http://cr.openjdk.java.net/~iignatyev//8252477/webrev.00/
>>> 99 lines changed: 19 ins; 20 del; 60 mod;
>> Hi all,
>> could you please review the patch which unblocks the rest of 8219140's (get
>> rid of vmTestbase/PropertyResolvingWrapper) sub-tasks?
>> background from JBS:
>>> jtreg splits command line by space to get the list of arguments and there
>>> is no way to prevent that (nor thru escaping, nor by adding quotes).
>>> currently, PropertyResolvingWrapper handles that and joins multiple
>>> arguments within double quotes into one argument before passing it to the
>>> actual test class. the only place where it's needed is in the tests which
>>> use nsk/share/ArgumentParser (or more precisely
>>> nsk.share.jpda.DebugeeArgumentHandler and nsk/share/jdb/JdbArgumentHandler).
>>>
>>> in preparation for PropertyResolvingWrapper removal, ArgumentParser should
>>> be updated to handle the "split" argument on its own.
>> I've also taken the liberty to slightly clean up ArgumentParser.
>> JBS: https://bugs.openjdk.java.net/browse/JDK-8252477
>> webrev: http://cr.openjdk.java.net/~iignatyev//8252477/webrev.00/
>> testing: all the tests which use ArgumentParser (:vmTestbase_nsk_aod
>> :vmTestbase_nsk_jdb :vmTestbase_nsk_jdi :vmTestbase_nsk_jdw
>> ,:vmTestbase_nsk_jvmti :vmTestbase_vm_compiler :vmTestbase_vm_mlvm) on
>> {windows,linux,macos}-x64
>> Thanks,
>> -- Igor