flag: handle nil os.Args when setting CommandLine at package level

Fixes #68340

Change-Id: I65037be6961e9ec720537713cb3f23ab9f5f8459
GitHub-Last-Rev: fadcb299c3
GitHub-Pull-Request: golang/go#68341
Reviewed-on: https://go-review.googlesource.com/c/go/+/597075
Reviewed-by: Ian Lance Taylor <iant@google.com>
LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com>
Auto-Submit: Ian Lance Taylor <iant@google.com>
Reviewed-by: Dmitri Shuralyov <dmitshur@google.com>
Reviewed-by: Rob Pike <r@golang.org>
This commit is contained in:
Darren 2024-07-19 09:19:18 +00:00 committed by Gopher Robot
parent 53270be21c
commit 00cb41e14d

View File

@ -1196,9 +1196,16 @@ func Parsed() bool {
// CommandLine is the default set of command-line flags, parsed from [os.Args].
// The top-level functions such as [BoolVar], [Arg], and so on are wrappers for the
// methods of CommandLine.
var CommandLine = NewFlagSet(os.Args[0], ExitOnError)
var CommandLine *FlagSet
func init() {
// It's possible for execl to hand us an empty os.Args.
if len(os.Args) == 0 {
CommandLine = NewFlagSet("", ExitOnError)
} else {
CommandLine = NewFlagSet(os.Args[0], ExitOnError)
}
// Override generic FlagSet default Usage with call to global Usage.
// Note: This is not CommandLine.Usage = Usage,
// because we want any eventual call to use any updated value of Usage,