diff --git a/common/http/http.go b/common/http/http.go index 3c6475443..b8f532cc1 100644 --- a/common/http/http.go +++ b/common/http/http.go @@ -39,7 +39,14 @@ func PostJSON( res, err := httpClient.Do(req.WithContext(ctx)) if res != nil { - defer (func() { err = res.Body.Close() })() + defer (func() { + finalErr := res.Body.Close() + if err != nil && finalErr != nil { + err = fmt.Errorf("%s\n%s", err, finalErr) + } else if err == nil { + err = finalErr + } + })() } if err != nil { return err diff --git a/common/test/client.go b/common/test/client.go index a38540ac9..55339e3a9 100644 --- a/common/test/client.go +++ b/common/test/client.go @@ -82,7 +82,14 @@ func (r *Request) Do() (err error) { if err != nil { return err } - defer (func() { err = res.Body.Close() })() + defer (func() { + finalErr := res.Body.Close() + if err != nil && finalErr != nil { + err = fmt.Errorf("%s\n%s", err, finalErr) + } else if err == nil { + err = finalErr + } + })() if res.StatusCode != r.WantedStatusCode { return fmt.Errorf("incorrect status code. Expected: %d Got: %d", r.WantedStatusCode, res.StatusCode) diff --git a/mediaapi/fileutils/fileutils.go b/mediaapi/fileutils/fileutils.go index 36b2c5b89..a20623c8a 100644 --- a/mediaapi/fileutils/fileutils.go +++ b/mediaapi/fileutils/fileutils.go @@ -112,8 +112,14 @@ func WriteTempFile(reqReader io.Reader, maxFileSizeBytes config.FileSizeBytes, a if err != nil { return } - defer (func() { err = tmpFile.Close() })() - + defer (func() { + finalErr := tmpFile.Close() + if err != nil && finalErr != nil { + err = fmt.Errorf("%s\n%s", err, finalErr) + } else if err == nil { + err = finalErr + } + })() // The amount of data read is limited to maxFileSizeBytes. At this point, if there is more data it will be truncated. limitedReader := io.LimitReader(reqReader, int64(maxFileSizeBytes)) // Hash the file data. The hash will be returned. The hash is useful as a diff --git a/mediaapi/thumbnailer/thumbnailer_nfnt.go b/mediaapi/thumbnailer/thumbnailer_nfnt.go index 5df6ce4be..84d4bcd04 100644 --- a/mediaapi/thumbnailer/thumbnailer_nfnt.go +++ b/mediaapi/thumbnailer/thumbnailer_nfnt.go @@ -18,6 +18,7 @@ package thumbnailer import ( "context" + "fmt" "image" "image/draw" @@ -125,7 +126,14 @@ func writeFile(img image.Image, dst string) (err error) { if err != nil { return err } - defer (func() { err = out.Close() })() + defer (func() { + finalErr := out.Close() + if err != nil && finalErr != nil { + err = fmt.Errorf("%s\n%s", err, finalErr) + } else if err == nil { + err = finalErr + } + })() return jpeg.Encode(out, img, &jpeg.Options{ Quality: 85, diff --git a/roomserver/storage/invite_table.go b/roomserver/storage/invite_table.go index 4f9cdfb41..dc9856b47 100644 --- a/roomserver/storage/invite_table.go +++ b/roomserver/storage/invite_table.go @@ -17,6 +17,7 @@ package storage import ( "context" "database/sql" + "fmt" "github.com/matrix-org/dendrite/common" "github.com/matrix-org/dendrite/roomserver/types" @@ -119,7 +120,14 @@ func (s *inviteStatements) updateInviteRetired( if err != nil { return nil, err } - defer (func() { err = rows.Close() })() + defer (func() { + finalErr := rows.Close() + if err != nil && finalErr != nil { + err = fmt.Errorf("%s\n%s", err, finalErr) + } else if err == nil { + err = finalErr + } + })() for rows.Next() { var inviteEventID string if err := rows.Scan(&inviteEventID); err != nil {