mirror of
https://github.com/python/cpython.git
synced 2025-08-28 12:45:07 +00:00
Issue #10266: uu.decode didn't close in_file explicitly when it was given
as a filename. Patch by Brian Brazil.
This commit is contained in:
parent
e974571d36
commit
f569826f06
3 changed files with 77 additions and 53 deletions
|
@ -196,6 +196,23 @@ class UUFileTest(unittest.TestCase):
|
||||||
finally:
|
finally:
|
||||||
self._kill(f)
|
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):
|
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
|
||||||
|
|
12
Lib/uu.py
12
Lib/uu.py
|
@ -92,10 +92,14 @@ def decode(in_file, out_file=None, mode=None, quiet=False):
|
||||||
#
|
#
|
||||||
# Open the input file, if needed.
|
# Open the input file, if needed.
|
||||||
#
|
#
|
||||||
|
opened_files = []
|
||||||
if in_file == '-':
|
if in_file == '-':
|
||||||
in_file = sys.stdin.buffer
|
in_file = sys.stdin.buffer
|
||||||
elif isinstance(in_file, str):
|
elif isinstance(in_file, str):
|
||||||
in_file = open(in_file, 'rb')
|
in_file = open(in_file, 'rb')
|
||||||
|
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
|
||||||
#
|
#
|
||||||
|
@ -122,7 +126,6 @@ def decode(in_file, out_file=None, mode=None, quiet=False):
|
||||||
#
|
#
|
||||||
# Open the output file
|
# Open the output file
|
||||||
#
|
#
|
||||||
opened = False
|
|
||||||
if out_file == '-':
|
if out_file == '-':
|
||||||
out_file = sys.stdout.buffer
|
out_file = sys.stdout.buffer
|
||||||
elif isinstance(out_file, str):
|
elif isinstance(out_file, str):
|
||||||
|
@ -132,7 +135,7 @@ def decode(in_file, out_file=None, mode=None, quiet=False):
|
||||||
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
|
||||||
#
|
#
|
||||||
|
@ -150,8 +153,9 @@ def decode(in_file, out_file=None, mode=None, quiet=False):
|
||||||
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"""
|
||||||
|
|
|
@ -59,6 +59,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 #10160: Speed up operator.attrgetter. Patch by Christos Georgiou.
|
- Issue #10160: Speed up operator.attrgetter. Patch by Christos Georgiou.
|
||||||
|
|
||||||
- logging: Added style option to basicConfig() to allow %, {} or $-formatting.
|
- logging: Added style option to basicConfig() to allow %, {} or $-formatting.
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue