diff --git a/api/cache.go b/api/cache.go index 006362504..9d6ee7ea0 100644 --- a/api/cache.go +++ b/api/cache.go @@ -62,16 +62,12 @@ func cacheKey(req *http.Request) (string, error) { return fmt.Sprintf("%x", digest), nil } -type readCloser struct { - io.Reader - io.Closer -} - func readCache(ttl time.Duration, cacheFile string, req *http.Request) (*http.Response, error) { f, err := os.Open(cacheFile) if err != nil { return nil, err } + defer f.Close() fs, err := f.Stat() if err != nil { @@ -83,15 +79,13 @@ func readCache(ttl time.Duration, cacheFile string, req *http.Request) (*http.Re return nil, errors.New("cache expired") } - res, err := http.ReadResponse(bufio.NewReader(f), req) - if res == nil { - res.Body = &readCloser{ - Reader: res.Body, - Closer: f, - } - } else { - f.Close() + body := &bytes.Buffer{} + _, err = io.Copy(body, f) + if err != nil { + return nil, err } + + res, err := http.ReadResponse(bufio.NewReader(body), req) return res, err } diff --git a/api/cache_test.go b/api/cache_test.go index 48255186f..8540e7d44 100644 --- a/api/cache_test.go +++ b/api/cache_test.go @@ -39,6 +39,7 @@ func Test_CacheReponse(t *testing.T) { if err != nil { return "", err } + defer res.Body.Close() resBody, err := ioutil.ReadAll(res.Body) if err != nil { err = fmt.Errorf("ReadAll: %w", err)