summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authornyasukun <n@yasukun.org>2016-07-22 22:06:06 +0900
committerToshio Kuratomi <a.badger@gmail.com>2016-11-04 12:58:21 -0700
commit00c48637b070c072d139b6faced1d5bc5d584270 (patch)
tree9091ef16a5448f6b8d6dcda4aaef9a58d036eade
parent0f6b318b2916ea3024cf4833125c353b98d30d55 (diff)
downloadansible-00c48637b070c072d139b6faced1d5bc5d584270.tar.gz
fixed memoryerror when coping huge file (#16392)
* fixed * support both python 2 and 3 (cherry picked from commit adea1f2b80d806d94ca1bdb2d06f2df077feb948)
-rw-r--r--lib/ansible/parsing/dataloader.py4
-rw-r--r--lib/ansible/parsing/vault/__init__.py6
2 files changed, 8 insertions, 2 deletions
diff --git a/lib/ansible/parsing/dataloader.py b/lib/ansible/parsing/dataloader.py
index 3ab56a935c..ebcfa31d1b 100644
--- a/lib/ansible/parsing/dataloader.py
+++ b/lib/ansible/parsing/dataloader.py
@@ -331,11 +331,11 @@ class DataLoader():
try:
with open(to_bytes(real_path), 'rb') as f:
- data = f.read()
- if self._vault.is_encrypted(data):
+ if self._vault.is_encrypted(f):
# if the file is encrypted and no password was specified,
# the decrypt call would throw an error, but we check first
# since the decrypt function doesn't know the file name
+ data = f.read()
if not self._vault_password:
raise AnsibleParserError("A vault password must be specified to decrypt %s" % file_path)
diff --git a/lib/ansible/parsing/vault/__init__.py b/lib/ansible/parsing/vault/__init__.py
index a86907d8e7..e7703b5c1d 100644
--- a/lib/ansible/parsing/vault/__init__.py
+++ b/lib/ansible/parsing/vault/__init__.py
@@ -115,6 +115,12 @@ class VaultLib:
:returns: True if it is recognized. Otherwise, False.
"""
+ if hasattr(data, 'read'):
+ current_position = data.tell()
+ header_part = data.read(len(b_HEADER))
+ data.seek(current_position)
+ return self.is_encrypted(header_part)
+
if to_bytes(data, errors='strict', encoding='utf-8').startswith(b_HEADER):
return True
return False