]> Cypherpunks repositories - gostls13.git/commitdiff
cmd/pprof: fix exception when file or path contains colon
authorcui fliter <imcusg@gmail.com>
Fri, 3 Nov 2023 07:03:12 +0000 (15:03 +0800)
committerCherry Mui <cherryyz@google.com>
Wed, 1 May 2024 03:56:37 +0000 (03:56 +0000)
Fixes #63924

Change-Id: I4ea17979faaca04eb6b046abffca2dd77397e0cb
Reviewed-on: https://go-review.googlesource.com/c/go/+/539595
Reviewed-by: Cherry Mui <cherryyz@google.com>
Reviewed-by: David Chase <drchase@google.com>
LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com>
Run-TryBot: shuang cui <imcusg@gmail.com>
TryBot-Result: Gopher Robot <gobot@golang.org>

src/cmd/pprof/pprof.go

index d4db9df285171e4855ca26eb112ec7f0f1c0f3dc..24d6ee04a0c150d31959db98da04666dea3610c0 100644 (file)
@@ -45,6 +45,16 @@ type fetcher struct {
 }
 
 func (f *fetcher) Fetch(src string, duration, timeout time.Duration) (*profile.Profile, string, error) {
+       // Firstly, determine if the src is an existing file on the disk.
+       // If it is a file, let regular pprof open it.
+       // If it is not a file, when the src contains `:`
+       // (e.g. mem_2023-11-02_03:55:24 or abc:123/mem_2023-11-02_03:55:24),
+       // url.Parse will recognize it as a link and ultimately report an error,
+       // similar to `abc:123/mem_2023-11-02_03:55:24:
+       // Get "http://abc:123/mem_2023-11-02_03:55:24": dial tcp: lookup abc: no such host`
+       if _, openErr := os.Stat(src); openErr == nil {
+               return nil, "", nil
+       }
        sourceURL, timeout := adjustURL(src, duration, timeout)
        if sourceURL == "" {
                // Could not recognize URL, let regular pprof attempt to fetch the profile (eg. from a file)