Commit 61d14b76 authored by Antoine Pitrou's avatar Antoine Pitrou

Merged revisions 86037 via svnmerge from

svn+ssh://pythondev@svn.python.org/python/branches/py3k

........
  r86037 | antoine.pitrou | 2010-10-31 17:04:14 +0100 (dim., 31 oct. 2010) | 4 lines

  Issue #10266: uu.decode didn't close in_file explicitly when it was given
  as a filename.  Patch by Brian Brazil.
........
parent 9f3f9c51
...@@ -161,6 +161,23 @@ class UUFileTest(unittest.TestCase): ...@@ -161,6 +161,23 @@ class UUFileTest(unittest.TestCase):
finally: finally:
self._kill(f) self._kill(f)
def test_decode_filename(self):
f = None
try:
test_support.unlink(self.tmpin)
f = open(self.tmpin, 'w')
f.write(encodedtextwrapped % (0644, self.tmpout))
f.close()
uu.decode(self.tmpin)
f = open(self.tmpout, 'r')
s = f.read()
f.close()
self.assertEqual(s, plaintext)
finally:
self._kill(f)
def test_decodetwice(self): def test_decodetwice(self):
# Verify that decode() will refuse to overwrite an existing file # Verify that decode() will refuse to overwrite an existing file
f = None f = None
......
...@@ -92,10 +92,13 @@ def decode(in_file, out_file=None, mode=None, quiet=0): ...@@ -92,10 +92,13 @@ def decode(in_file, out_file=None, mode=None, quiet=0):
# #
# Open the input file, if needed. # Open the input file, if needed.
# #
opened_files = []
if in_file == '-': if in_file == '-':
in_file = sys.stdin in_file = sys.stdin
elif isinstance(in_file, basestring): elif isinstance(in_file, basestring):
in_file = open(in_file) in_file = open(in_file)
opened_files.append(in_file)
try:
# #
# Read until a begin is encountered or we've exhausted the file # Read until a begin is encountered or we've exhausted the file
# #
...@@ -121,7 +124,6 @@ def decode(in_file, out_file=None, mode=None, quiet=0): ...@@ -121,7 +124,6 @@ def decode(in_file, out_file=None, mode=None, quiet=0):
# #
# Open the output file # Open the output file
# #
opened = False
if out_file == '-': if out_file == '-':
out_file = sys.stdout out_file = sys.stdout
elif isinstance(out_file, basestring): elif isinstance(out_file, basestring):
...@@ -131,7 +133,7 @@ def decode(in_file, out_file=None, mode=None, quiet=0): ...@@ -131,7 +133,7 @@ def decode(in_file, out_file=None, mode=None, quiet=0):
except AttributeError: except AttributeError:
pass pass
out_file = fp out_file = fp
opened = True opened_files.append(out_file)
# #
# Main decoding loop # Main decoding loop
# #
...@@ -149,8 +151,9 @@ def decode(in_file, out_file=None, mode=None, quiet=0): ...@@ -149,8 +151,9 @@ def decode(in_file, out_file=None, mode=None, quiet=0):
s = in_file.readline() s = in_file.readline()
if not s: if not s:
raise Error('Truncated input file') raise Error('Truncated input file')
if opened: finally:
out_file.close() for f in opened_files:
f.close()
def test(): def test():
"""uuencode/uudecode main program""" """uuencode/uudecode main program"""
......
...@@ -66,6 +66,9 @@ Core and Builtins ...@@ -66,6 +66,9 @@ Core and Builtins
Library Library
------- -------
- Issue #10266: uu.decode didn't close in_file explicitly when it was given
as a filename. Patch by Brian Brazil.
- Issue #10246: uu.encode didn't close file objects explicitly when filenames - Issue #10246: uu.encode didn't close file objects explicitly when filenames
were given to it. Patch by Brian Brazil. were given to it. Patch by Brian Brazil.
......
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