From be7e4fee4b6a96074d003d7211047c23ae9e6c18 Mon Sep 17 00:00:00 2001 From: Than McIntosh Date: Thu, 19 Jan 2023 10:16:07 -0500 Subject: [PATCH] [release-branch.go1.20] runtime/coverage: avoid non-test coverage profiles in test report helper When walking through the set of coverage data files generated from a "go test -cover" run, it's possible to encounter pods (clumps of data files) that were generated by a run from an instrumented Go tool (for example, cmd/compile). Add a guard to the test reporting code to ensure that it only processes files created by the currently running test. Fixes #57924. Change-Id: I1bb7dce88305e1088162e3cb1df628486ecee1c1 Reviewed-on: https://go-review.googlesource.com/c/go/+/462756 Reviewed-by: David Chase TryBot-Result: Gopher Robot Reviewed-by: Cherry Mui Run-TryBot: Than McIntosh (cherry picked from commit cf70d37967b8447af8305e02ef534c4c5f42d49c) Reviewed-on: https://go-review.googlesource.com/c/go/+/463417 Run-TryBot: Matthew Dempsky Auto-Submit: Matthew Dempsky Reviewed-by: Than McIntosh --- src/runtime/coverage/testsupport.go | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/runtime/coverage/testsupport.go b/src/runtime/coverage/testsupport.go index 1d90ebd7a2..a481bbbd9d 100644 --- a/src/runtime/coverage/testsupport.go +++ b/src/runtime/coverage/testsupport.go @@ -15,6 +15,7 @@ import ( "internal/coverage/pods" "io" "os" + "strings" ) // processCoverTestDir is called (via a linknamed reference) from @@ -80,7 +81,15 @@ func processCoverTestDirInternal(dir string, cfile string, cm string, cpkg strin cf: cformat.NewFormatter(cmode), cmode: cmode, } + // Generate the expected hash string based on the final meta-data + // hash for this test, then look only for pods that refer to that + // hash (just in case there are multiple instrumented executables + // in play). See issue #57924 for more on this. + hashstring := fmt.Sprintf("%x", finalHash) for _, p := range podlist { + if !strings.Contains(p.MetaFile, hashstring) { + continue + } if err := ts.processPod(p); err != nil { return err } -- 2.48.1