From b1eb467f50f0c080e89a122426061b28f0be0567 Mon Sep 17 00:00:00 2001 From: Stewart Miles Date: Mon, 29 Aug 2022 12:48:32 -0700 Subject: [PATCH] fix: fix socket leak in impersonated_credentials (#1123) * fix: Fix socket leak in impersonated_credentials impersonated_credentials.Credentials.sign_bytes() created a session that wasn't closed leaking a socket. This fixes the issue by always closing the requests session after a signing request is complete. Fixes #1122 --- google/auth/impersonated_credentials.py | 9 ++++++--- system_tests/secrets.tar.enc | Bin 10324 -> 10324 bytes 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/google/auth/impersonated_credentials.py b/google/auth/impersonated_credentials.py index 4d0c4f0f1..f978b64ef 100644 --- a/google/auth/impersonated_credentials.py +++ b/google/auth/impersonated_credentials.py @@ -288,9 +288,12 @@ def sign_bytes(self, message): authed_session = AuthorizedSession(self._source_credentials) - response = authed_session.post( - url=iam_sign_endpoint, headers=headers, json=body - ) + try: + response = authed_session.post( + url=iam_sign_endpoint, headers=headers, json=body + ) + finally: + authed_session.close() if response.status_code != http_client.OK: raise exceptions.TransportError( diff --git a/system_tests/secrets.tar.enc b/system_tests/secrets.tar.enc index e8785c796c86ffe2b670c0133f576834ab2ec311..37a9d6a1e49e126c56acf6d3ed739449a7d54b54 100644 GIT binary patch literal 10324 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

DX#d9^0S?RvIQ3F-dRCLe|~ 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 mY7U<*amU5