bodyclose
bodyclose copied to clipboard
False negatives with io.Closer
Hello, the following code is good, but bodyclose finds it bad:
$ git diff
diff --git a/passes/bodyclose/testdata/src/a/a.go b/passes/bodyclose/testdata/src/a/a.go
index dcf9448..da0c7cd 100644
--- a/passes/bodyclose/testdata/src/a/a.go
+++ b/passes/bodyclose/testdata/src/a/a.go
@@ -2,6 +2,7 @@ package a
import (
"fmt"
+ "io"
"net/http"
)
@@ -83,6 +84,14 @@ func f7() {
resCloser()
}
+func f7c() {
+ res, _ := http.Get("http://example.com/") // OK
+ resCloser := func(c io.Closer) {
+ c.Close()
+ }
+ resCloser(res.Body)
+}
+
func f8() {
res, _ := http.Get("http://example.com/") // want "response body must be closed"
_ = func() {
$ GO111MODULE=on go test -v github.com/timakin/bodyclose/passes/bodyclose
=== RUN Test
--- FAIL: Test (1.51s)
analysistest.go:251: a/a.go:88:20: unexpected diagnostic: response body must be closed
FAIL
FAIL github.com/timakin/bodyclose/passes/bodyclose 1.529s