From e499e940fab604c4df6ac94880d1a5fa43ca837d Mon Sep 17 00:00:00 2001 From: Shubham Padkonde Date: Fri, 2 Oct 2026 13:12:37 +0530 Subject: [PATCH] fix: retain metadata when decrypting array entries --- client_encryption/json_path_utils.py | 6 +++--- tests/test_field_level_encryption.py | 12 ++++++++++++ 2 files changed, 15 insertions(+), 3 deletions(-) diff --git a/client_encryption/json_path_utils.py b/client_encryption/json_path_utils.py index c79a005..e433da3 100644 --- a/client_encryption/json_path_utils.py +++ b/client_encryption/json_path_utils.py @@ -99,9 +99,9 @@ def cleanup_node(tree, path, target): node = __get_node(tree, parent, False) else: node = tree - if type(node) is list and not node[0][to_delete]: - del node[0][to_delete] - elif not node[to_delete]: + if type(node) is list: + node = node[0] + if not node[to_delete]: del node[to_delete] else: diff --git a/tests/test_field_level_encryption.py b/tests/test_field_level_encryption.py index 72691ee..7f50895 100644 --- a/tests/test_field_level_encryption.py +++ b/tests/test_field_level_encryption.py @@ -17,6 +17,18 @@ def setUp(self): self._config._paths["$"]._to_encrypt = {"data": "encryptedData"} self._config._paths["$"]._to_decrypt = {"encryptedData": "data"} + def test_decrypt_array_preserves_encrypted_node_metadata(self): + payload = [{"data": {"message": "hello"}}] + encrypted = to_test.encrypt_payload(payload, self._config) + encrypted[0]["encryptedData"]["metadata"] = "keep" + + decrypted = to_test.decrypt_payload(encrypted, self._config) + + self.assertEqual( + [{"data": {"message": "hello"}, "encryptedData": {"metadata": "keep"}}], + decrypted, + ) + def test_encrypt_bytes(self): iv_value = base64.b64decode("VNm/scgd1jhWF0z4+Qh6MA==") key_kalue = base64.b64decode("mZzmzoURXI3Vk0vdsPkcFw==")