From 8ec28a2ba4134d39c05f0fe6f7e674655e9cc29b Mon Sep 17 00:00:00 2001 From: James Cooke Date: Sun, 19 Feb 2017 17:02:44 +0000 Subject: [PATCH] Download remote apt deb file in bytes mode in Python 2 and 3 Fixes #19710 --- lib/ansible/modules/packaging/os/apt.py | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/lib/ansible/modules/packaging/os/apt.py b/lib/ansible/modules/packaging/os/apt.py index f74f68850b..0165a08352 100644 --- a/lib/ansible/modules/packaging/os/apt.py +++ b/lib/ansible/modules/packaging/os/apt.py @@ -234,7 +234,7 @@ import time from ansible.module_utils.basic import AnsibleModule from ansible.module_utils.pycompat24 import get_exception -from ansible.module_utils._text import to_native +from ansible.module_utils._text import to_bytes, to_native from ansible.module_utils.urls import fetch_url # APT related constants @@ -716,12 +716,14 @@ def download(module, deb): try: rsp, info = fetch_url(module, deb) - f = open(package, 'w') + # Ensure file is open in binary mode for Python 3 + f = open(package, 'wb') # Read 1kb at a time to save on ram while True: data = rsp.read(BUFSIZE) + data = to_bytes(data, errors='surrogate_or_strict') - if data == "": + if len(data) < 1: break # End of file, break while loop f.write(data)