]> granicus.if.org Git - python/commitdiff
Merged revisions 85975 via svnmerge from
authorAntoine Pitrou <solipsis@pitrou.net>
Sun, 31 Oct 2010 13:07:00 +0000 (13:07 +0000)
committerAntoine Pitrou <solipsis@pitrou.net>
Sun, 31 Oct 2010 13:07:00 +0000 (13:07 +0000)
svn+ssh://pythondev@svn.python.org/python/branches/py3k

........
  r85975 | antoine.pitrou | 2010-10-30 15:03:56 +0200 (sam., 30 oct. 2010) | 4 lines

  Issue #10246: uu.encode didn't close file objects explicitly when filenames
  were given to it.  Patch by Brian Brazil.
........

Lib/uu.py
Misc/NEWS

index d70f0e60bec0b8bc7a30b55603d4c31d4a1a3aa1..829f2925fd501918e79fa8f8383a912e598633f7 100755 (executable)
--- a/Lib/uu.py
+++ b/Lib/uu.py
@@ -44,40 +44,47 @@ def encode(in_file, out_file, name=None, mode=None):
     #
     # If in_file is a pathname open it and change defaults
     #
-    if in_file == '-':
-        in_file = sys.stdin.buffer
-    elif isinstance(in_file, str):
+    opened_files = []
+    try:
+        if in_file == '-':
+            in_file = sys.stdin.buffer
+        elif isinstance(in_file, str):
+            if name is None:
+                name = os.path.basename(in_file)
+            if mode is None:
+                try:
+                    mode = os.stat(in_file).st_mode
+                except AttributeError:
+                    pass
+            in_file = open(in_file, 'rb')
+            opened_files.append(in_file)
+        #
+        # Open out_file if it is a pathname
+        #
+        if out_file == '-':
+            out_file = sys.stdout.buffer
+        elif isinstance(out_file, str):
+            out_file = open(out_file, 'wb')
+            opened_files.append(out_file)
+        #
+        # Set defaults for name and mode
+        #
         if name is None:
-            name = os.path.basename(in_file)
+            name = '-'
         if mode is None:
-            try:
-                mode = os.stat(in_file).st_mode
-            except AttributeError:
-                pass
-        in_file = open(in_file, 'rb')
-    #
-    # Open out_file if it is a pathname
-    #
-    if out_file == '-':
-        out_file = sys.stdout.buffer
-    elif isinstance(out_file, str):
-        out_file = open(out_file, 'wb')
-    #
-    # Set defaults for name and mode
-    #
-    if name is None:
-        name = '-'
-    if mode is None:
-        mode = 0o666
-    #
-    # Write the data
-    #
-    out_file.write(('begin %o %s\n' % ((mode & 0o777), name)).encode("ascii"))
-    data = in_file.read(45)
-    while len(data) > 0:
-        out_file.write(binascii.b2a_uu(data))
+            mode = 0o666
+        #
+        # Write the data
+        #
+        out_file.write(('begin %o %s\n' % ((mode & 0o777), name)).encode("ascii"))
         data = in_file.read(45)
-    out_file.write(b' \nend\n')
+        while len(data) > 0:
+            out_file.write(binascii.b2a_uu(data))
+            data = in_file.read(45)
+        out_file.write(b' \nend\n')
+    finally:
+        for f in opened_files:
+            f.close()
 
 
 def decode(in_file, out_file=None, mode=None, quiet=False):
index ce29e40d1c773c7f583271041679d411dde93d6b..b763dab6c454bcb4985ebff267e6e23702663ac8 100644 (file)
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -143,6 +143,9 @@ C-API
 Library
 -------
 
+- Issue #10246: uu.encode didn't close file objects explicitly when filenames
+  were given to it.  Patch by Brian Brazil.
+
 - Issue #10253: FileIO leaks a file descriptor when trying to open a file
   for append that isn't seekable.  Patch by Brian Brazil.