You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@groovy.apache.org by "Brian Ray (JIRA)" <ji...@apache.org> on 2019/03/03 00:10:00 UTC
[jira] [Created] (GROOVY-9016) picocli-based CliBuilder can be
tricked into greedily consuming option as an arg
Brian Ray created GROOVY-9016:
---------------------------------
Summary: picocli-based CliBuilder can be tricked into greedily consuming option as an arg
Key: GROOVY-9016
URL: https://issues.apache.org/jira/browse/GROOVY-9016
Project: Groovy
Issue Type: Bug
Components: command line processing
Affects Versions: 2.5.6
Environment: >>First encountered<<
Groovy 2.4.15 - no bug
Groovy 2.5.6 - bug
Win 8.1 Pro
Zulu OpenJDK 1.8.0_202
>>Minimal replication<<
Groovy 2.4.8 (distro package) - no bug
OpenJDK 1.8.0_181 (distro package)
Debian 8
groovy:2.5.6-jre8-alpine Docker image
OpenJdk 1.8.0_191 (in image)
Debian 8 + Alpine 8 (in image)
Reporter: Brian Ray
Stumbled across this edge case upgrading from 2.4.x to 2.5.6. Given the following {{CliBuilder}} based script,
{code:java}
final cli = new CliBuilder()
cli.with {
f(
longOpt: "firstOpt",
"first option",
required: false,
args: 1,
argName: "firstOpt",
)
}
final opts = cli.parse(args)
println """
firstOpt=$opts.firstOpt
args=${ opts.arguments() }
"""
{code}
Passing an option value containing the character combo {{+=}} can trigger greedy assignment to args. Here is the pre-2.5 behavior.
{noformat}
$ ~/cli_greedy_arg.groovy -f+= bat
firstOpt=+=
args=[bat]
$ ~/cli_greedy_arg.groovy -f'+=' bat
firstOpt=+=
args=[bat]
$ ~/cli_greedy_arg.groovy -f"+=" bat
firstOpt=+=
args=[bat]
$ ~/cli_greedy_arg.groovy -f="+=" bat
firstOpt==+=
args=[bat]
{noformat}
That odd option value is captured properly each time.
Bumping up to 2.5.6 that option value tricks picocli (I'm guessing) into consuming the opt value as an arg in three out of four attempts.
{noformat}
$ docker run --rm -v "$PWD":/home/groovy/scripts -w /home/groovy/scripts groovy:2.5.6-jre8
-alpine groovy cli_greedy_arg.groovy -f+= bat
firstOpt=false
args=[-f+=, bat]
$ docker run --rm -v "$PWD":/home/groovy/scripts -w /home/groovy/scripts groovy:2.5.6-jre8
-alpine groovy cli_greedy_arg.groovy -f'+=' bat
firstOpt=false
args=[-f+=, bat]
$ docker run --rm -v "$PWD":/home/groovy/scripts -w /home/groovy/scripts groovy:2.5.6-jre8
-alpine groovy cli_greedy_arg.groovy -f"+=" bat
firstOpt=false
args=[-f+=, bat]
$ docker run --rm -v "$PWD":/home/groovy/scripts -w /home/groovy/scripts groovy:2.5.6-jre8
-alpine groovy cli_greedy_arg.groovy -f="+=" bat
firstOpt=+=
args=[bat]
{noformat}
--
This message was sent by Atlassian JIRA
(v7.6.3#76005)