From 74a8837edfbd698688698861787d36f1a5f8c096 Mon Sep 17 00:00:00 2001 From: ma91n Date: Thu, 5 Sep 2024 17:06:46 +0900 Subject: [PATCH 1/3] skip http.ResponseController --- passes/bodyclose/bodyclose.go | 11 ++++++----- passes/bodyclose/testdata/src/a/issue52.go | 13 +++++++++++++ 2 files changed, 19 insertions(+), 5 deletions(-) create mode 100644 passes/bodyclose/testdata/src/a/issue52.go diff --git a/passes/bodyclose/bodyclose.go b/passes/bodyclose/bodyclose.go index 27042a1..782033b 100644 --- a/passes/bodyclose/bodyclose.go +++ b/passes/bodyclose/bodyclose.go @@ -2,15 +2,14 @@ package bodyclose import ( "fmt" + "github.com/gostaticanalysis/analysisutil" "go/ast" "go/types" - "strconv" - "strings" - - "github.com/gostaticanalysis/analysisutil" "golang.org/x/tools/go/analysis" "golang.org/x/tools/go/analysis/passes/buildssa" "golang.org/x/tools/go/ssa" + "strconv" + "strings" ) var Analyzer = &analysis.Analyzer{ @@ -207,7 +206,9 @@ func (r *runner) getReqCall(instr ssa.Instruction) (*ssa.Call, bool) { if !ok { return nil, false } - if !strings.Contains(call.Type().String(), r.resTyp.String()) { + callType := call.Type().String() + if !strings.Contains(callType, r.resTyp.String()) || + strings.Contains(callType, "ResponseController") { return nil, false } return call, true diff --git a/passes/bodyclose/testdata/src/a/issue52.go b/passes/bodyclose/testdata/src/a/issue52.go new file mode 100644 index 0000000..73edfba --- /dev/null +++ b/passes/bodyclose/testdata/src/a/issue52.go @@ -0,0 +1,13 @@ +package a + +import ( + "io" + "net/http" + "time" +) + +func RequestHandler(w http.ResponseWriter, r *http.Request) { + rc := http.NewResponseController(w) // OK + _ = rc.SetWriteDeadline(time.Time{}) + _, _ = io.Copy(w, r.Body) +} From 657721b741c26c32e5f2001ec90448d0f322f2d0 Mon Sep 17 00:00:00 2001 From: ma91n Date: Thu, 5 Sep 2024 17:12:31 +0900 Subject: [PATCH 2/3] fmt package order --- passes/bodyclose/bodyclose.go | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/passes/bodyclose/bodyclose.go b/passes/bodyclose/bodyclose.go index 782033b..99c35e7 100644 --- a/passes/bodyclose/bodyclose.go +++ b/passes/bodyclose/bodyclose.go @@ -2,14 +2,15 @@ package bodyclose import ( "fmt" - "github.com/gostaticanalysis/analysisutil" "go/ast" "go/types" + "strconv" + "strings" + + "github.com/gostaticanalysis/analysisutil" "golang.org/x/tools/go/analysis" "golang.org/x/tools/go/analysis/passes/buildssa" "golang.org/x/tools/go/ssa" - "strconv" - "strings" ) var Analyzer = &analysis.Analyzer{ From 754c3111137400bab43782da1b1d0c49b2b91467 Mon Sep 17 00:00:00 2001 From: ma91n Date: Thu, 5 Sep 2024 17:17:03 +0900 Subject: [PATCH 3/3] change full path --- passes/bodyclose/bodyclose.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/passes/bodyclose/bodyclose.go b/passes/bodyclose/bodyclose.go index 99c35e7..c3fac0d 100644 --- a/passes/bodyclose/bodyclose.go +++ b/passes/bodyclose/bodyclose.go @@ -209,7 +209,7 @@ func (r *runner) getReqCall(instr ssa.Instruction) (*ssa.Call, bool) { } callType := call.Type().String() if !strings.Contains(callType, r.resTyp.String()) || - strings.Contains(callType, "ResponseController") { + strings.Contains(callType, "net/http.ResponseController") { return nil, false } return call, true