bodyclose icon indicating copy to clipboard operation
bodyclose copied to clipboard

False negatives with io.Closer

Open muravjov opened this issue 6 years ago • 0 comments

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

muravjov avatar Aug 14 '19 00:08 muravjov