Commit f569826f authored by Antoine Pitrou's avatar Antoine Pitrou

Issue #10266: uu.decode didn't close in_file explicitly when it was given

as a filename.  Patch by Brian Brazil.
parent e974571d
......@@ -196,6 +196,23 @@ class UUFileTest(unittest.TestCase):
finally:
self._kill(f)
def test_decode_filename(self):
f = None
try:
support.unlink(self.tmpin)
f = open(self.tmpin, 'wb')
f.write(encodedtextwrapped(0o644, self.tmpout))
f.close()
uu.decode(self.tmpin)
f = open(self.tmpout, 'rb')
s = f.read()
f.close()
self.assertEqual(s, plaintext)
finally:
self._kill(f)
def test_decodetwice(self):
# Verify that decode() will refuse to overwrite an existing file
f = None
......
......@@ -92,10 +92,14 @@ def decode(in_file, out_file=None, mode=None, quiet=False):
#
# Open the input file, if needed.
#
opened_files = []
if in_file == '-':
in_file = sys.stdin.buffer
elif isinstance(in_file, str):
in_file = open(in_file, 'rb')
opened_files.append(in_file)
try:
#
# Read until a begin is encountered or we've exhausted the file
#
......@@ -122,7 +126,6 @@ def decode(in_file, out_file=None, mode=None, quiet=False):
#
# Open the output file
#
opened = False
if out_file == '-':
out_file = sys.stdout.buffer
elif isinstance(out_file, str):
......@@ -132,7 +135,7 @@ def decode(in_file, out_file=None, mode=None, quiet=False):
except AttributeError:
pass
out_file = fp
opened = True
opened_files.append(out_file)
#
# Main decoding loop
#
......@@ -150,8 +153,9 @@ def decode(in_file, out_file=None, mode=None, quiet=False):
s = in_file.readline()
if not s:
raise Error('Truncated input file')
if opened:
out_file.close()
finally:
for f in opened_files:
f.close()
def test():
"""uuencode/uudecode main program"""
......
......@@ -59,6 +59,9 @@ Core and Builtins
Library
-------
- Issue #10266: uu.decode didn't close in_file explicitly when it was given
as a filename. Patch by Brian Brazil.
- Issue #10160: Speed up operator.attrgetter. Patch by Christos Georgiou.
- logging: Added style option to basicConfig() to allow %, {} or $-formatting.
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment