]> Cypherpunks repositories - gostls13.git/commitdiff
flag: handle nil os.Args when setting CommandLine at package level
authorDarren <darren@develer.co.uk>
Fri, 19 Jul 2024 09:19:18 +0000 (09:19 +0000)
committerGopher Robot <gobot@golang.org>
Mon, 22 Jul 2024 20:58:27 +0000 (20:58 +0000)
Fixes #68340

Change-Id: I65037be6961e9ec720537713cb3f23ab9f5f8459
GitHub-Last-Rev: fadcb299c383abdde000daec58b12019a75012c6
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>
src/flag/flag.go

index 4fa502839ada550fcdbca079970d5b7205dd4d6c..bda1e1a9b8d8fe8586515f8da5b1fa46402a8167 100644 (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,