From 4ec284ffd31869aa94308bf224c7020d0c90935f Mon Sep 17 00:00:00 2001 From: Sebastien Tardif Date: Sun, 17 May 2026 13:49:26 -0700 Subject: [PATCH] Fix file descriptor leak in GCP FGetObject on error paths objectFile opened with os.OpenFile is only closed on the happy path. If NewReader or io.Copy fails, the file descriptor leaks. Close objectFile on each error path with checked close errors, matching the pattern used by the Azure BlobClient.FGetObject implementation. The leak was introduced in #434 (2021-09-01). Assisted-by: Grok Signed-off-by: Sebastien Tardif --- internal/bucket/gcp/gcp.go | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/internal/bucket/gcp/gcp.go b/internal/bucket/gcp/gcp.go index 70afe9fcd..a0a1ce222 100644 --- a/internal/bucket/gcp/gcp.go +++ b/internal/bucket/gcp/gcp.go @@ -235,6 +235,9 @@ func (c *GCSClient) FGetObject(ctx context.Context, bucketName, objectName, loca GenerationMatch: objAttr.Generation, }).NewReader(ctx) if err != nil { + if cerr := objectFile.Close(); cerr != nil { + ctrl.LoggerFrom(ctx).Error(cerr, "failed to close file after reader error") + } return "", err } defer func() { @@ -245,6 +248,9 @@ func (c *GCSClient) FGetObject(ctx context.Context, bucketName, objectName, loca // Write Object to file. if _, err := io.Copy(objectFile, objectReader); err != nil { + if cerr := objectFile.Close(); cerr != nil { + ctrl.LoggerFrom(ctx).Error(cerr, "failed to close file after copy error") + } return "", err }