Skip to content

Commit b10c415

Browse files
fix: hanging object references in helper functions avoided (#264)
* hanging object references in helper functions avoided * Done autoformatting using tox * Header assertion modified Co-authored-by: Matt Bullock <[email protected]>
1 parent ae7c300 commit b10c415

File tree

2 files changed

+14
-4
lines changed

2 files changed

+14
-4
lines changed

src/aws_encryption_sdk/__init__.py

+10-2
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
# Copyright Amazon.com Inc. or its affiliates. All Rights Reserved.
22
# SPDX-License-Identifier: Apache-2.0
33
"""High level AWS Encryption SDK client functions."""
4+
import copy
5+
46
# Below are imported for ease of use by implementors
57
from aws_encryption_sdk.caches.local import LocalCryptoMaterialsCache # noqa
68
from aws_encryption_sdk.caches.null import NullCryptoMaterialsCache # noqa
@@ -84,7 +86,10 @@ def encrypt(**kwargs):
8486
with StreamEncryptor(**kwargs) as encryptor:
8587
ciphertext = encryptor.read()
8688

87-
return CryptoResult(result=ciphertext, header=encryptor.header, keyring_trace=encryptor.keyring_trace)
89+
header_copy = copy.deepcopy(encryptor.header)
90+
keyring_trace_copy = copy.deepcopy(encryptor.keyring_trace)
91+
92+
return CryptoResult(result=ciphertext, header=header_copy, keyring_trace=keyring_trace_copy)
8893

8994

9095
def decrypt(**kwargs):
@@ -143,7 +148,10 @@ def decrypt(**kwargs):
143148
with StreamDecryptor(**kwargs) as decryptor:
144149
plaintext = decryptor.read()
145150

146-
return CryptoResult(result=plaintext, header=decryptor.header, keyring_trace=decryptor.keyring_trace)
151+
header_copy = copy.deepcopy(decryptor.header)
152+
keyring_trace_copy = copy.deepcopy(decryptor.keyring_trace)
153+
154+
return CryptoResult(result=plaintext, header=header_copy, keyring_trace=keyring_trace_copy)
147155

148156

149157
def stream(**kwargs):

test/unit/test_client.py

+4-2
Original file line numberDiff line numberDiff line change
@@ -53,13 +53,15 @@ def test_encrypt(self):
5353
test_ciphertext, test_header = aws_encryption_sdk.encrypt(a=sentinel.a, b=sentinel.b, c=sentinel.b)
5454
self.mock_stream_encryptor.called_once_with(a=sentinel.a, b=sentinel.b, c=sentinel.b)
5555
assert test_ciphertext is _CIPHERTEXT
56-
assert test_header is _HEADER
56+
assert test_header == _HEADER
57+
assert test_header is not _HEADER
5758

5859
def test_decrypt(self):
5960
test_plaintext, test_header = aws_encryption_sdk.decrypt(a=sentinel.a, b=sentinel.b, c=sentinel.b)
6061
self.mock_stream_encryptor.called_once_with(a=sentinel.a, b=sentinel.b, c=sentinel.b)
6162
assert test_plaintext is _PLAINTEXT
62-
assert test_header is _HEADER
63+
assert test_header == _HEADER
64+
assert test_header is not _HEADER
6365

6466
def test_stream_encryptor_e(self):
6567
test = aws_encryption_sdk.stream(mode="e", a=sentinel.a, b=sentinel.b, c=sentinel.b)

0 commit comments

Comments
 (0)