From: cui fliter Date: Fri, 3 Nov 2023 07:03:12 +0000 (+0800) Subject: cmd/pprof: fix exception when file or path contains colon X-Git-Tag: go1.23rc1~489 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=c5698e31552953a0487ec23e0a015c02067065d3;p=gostls13.git cmd/pprof: fix exception when file or path contains colon Fixes #63924 Change-Id: I4ea17979faaca04eb6b046abffca2dd77397e0cb Reviewed-on: https://go-review.googlesource.com/c/go/+/539595 Reviewed-by: Cherry Mui Reviewed-by: David Chase LUCI-TryBot-Result: Go LUCI Run-TryBot: shuang cui TryBot-Result: Gopher Robot --- diff --git a/src/cmd/pprof/pprof.go b/src/cmd/pprof/pprof.go index d4db9df285..24d6ee04a0 100644 --- a/src/cmd/pprof/pprof.go +++ b/src/cmd/pprof/pprof.go @@ -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)