internal/gensupport: Ensure that any bodies created in `GetBody` are cleaned up
Change-Id: Idb7444509ce6c1df99b43908ef17730cc1c40698
Reviewed-on: https://code-review.googlesource.com/c/google-api-go-client/+/48910
Reviewed-by: kokoro <noreply+kokoro@google.com>
Reviewed-by: Tyler Bui-Palsulich <tbp@google.com>
diff --git a/internal/gensupport/media.go b/internal/gensupport/media.go
index 0ef96b3..0288cc3 100644
--- a/internal/gensupport/media.go
+++ b/internal/gensupport/media.go
@@ -290,6 +290,9 @@
fb := readerFunc(body)
fm := readerFunc(media)
combined, ctype := CombineBodyMedia(body, "application/json", media, mi.mType)
+ toCleanup := []io.Closer{
+ combined,
+ }
if fb != nil && fm != nil {
getBody = func() (io.ReadCloser, error) {
rb := ioutil.NopCloser(fb())
@@ -299,10 +302,16 @@
mimeBoundary = params["boundary"]
}
r, _ := combineBodyMedia(rb, "application/json", rm, mi.mType, mimeBoundary)
+ toCleanup = append(toCleanup, r)
return r, nil
}
}
- cleanup = func() { combined.Close() }
+ cleanup = func() {
+ for _, closer := range toCleanup {
+ _ = closer.Close()
+ }
+
+ }
reqHeaders.Set("Content-Type", ctype)
body = combined
}