fixed memoryerror when coping huge file (#16392)

* fixed

* support both python 2 and 3

(cherry picked from commit adea1f2b80)
pull/20067/head
nyasukun 8 years ago committed by Toshio Kuratomi
parent 0f6b318b29
commit 00c48637b0

@ -331,11 +331,11 @@ class DataLoader():
try: try:
with open(to_bytes(real_path), 'rb') as f: with open(to_bytes(real_path), 'rb') as f:
data = f.read() if self._vault.is_encrypted(f):
if self._vault.is_encrypted(data):
# if the file is encrypted and no password was specified, # if the file is encrypted and no password was specified,
# the decrypt call would throw an error, but we check first # the decrypt call would throw an error, but we check first
# since the decrypt function doesn't know the file name # since the decrypt function doesn't know the file name
data = f.read()
if not self._vault_password: if not self._vault_password:
raise AnsibleParserError("A vault password must be specified to decrypt %s" % file_path) raise AnsibleParserError("A vault password must be specified to decrypt %s" % file_path)

@ -115,6 +115,12 @@ class VaultLib:
:returns: True if it is recognized. Otherwise, False. :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): if to_bytes(data, errors='strict', encoding='utf-8').startswith(b_HEADER):
return True return True
return False return False

Loading…
Cancel
Save