]> granicus.if.org Git - python/commitdiff
Issue #20331: Fixed possible FD leaks in various modules:
authorSerhiy Storchaka <storchaka@gmail.com>
Sat, 25 Jan 2014 17:43:56 +0000 (19:43 +0200)
committerSerhiy Storchaka <storchaka@gmail.com>
Sat, 25 Jan 2014 17:43:56 +0000 (19:43 +0200)
http.server, imghdr, mailcap, mimetypes, xml.etree.

1  2 
Lib/http/server.py
Lib/imghdr.py
Lib/mailcap.py
Lib/mimetypes.py
Lib/xml/etree/ElementInclude.py

index f17074700dec723f597d77587ed0dc2a4938fb15,dab1eb65c4bc6327f4b1d7f2578612c0b5cec92e..f019bd9fc3ca357c15ff3056c5949e6841641e7f
@@@ -717,16 -711,20 +719,20 @@@ class SimpleHTTPRequestHandler(BaseHTTP
          ctype = self.guess_type(path)
          try:
              f = open(path, 'rb')
 -        except IOError:
 +        except OSError:
              self.send_error(404, "File not found")
              return None
-         self.send_response(200)
-         self.send_header("Content-type", ctype)
-         fs = os.fstat(f.fileno())
-         self.send_header("Content-Length", str(fs[6]))
-         self.send_header("Last-Modified", self.date_time_string(fs.st_mtime))
-         self.end_headers()
-         return f
+         try:
+             self.send_response(200)
+             self.send_header("Content-type", ctype)
+             fs = os.fstat(f.fileno())
+             self.send_header("Content-Length", str(fs[6]))
+             self.send_header("Last-Modified", self.date_time_string(fs.st_mtime))
+             self.end_headers()
+             return f
+         except:
+             f.close()
+             raise
  
      def list_directory(self, path):
          """Helper to produce a directory listing (absent index.html).
diff --cc Lib/imghdr.py
Simple merge
diff --cc Lib/mailcap.py
index bd61b0b0ae94232b4728d2700721e7b528467545,0c0b19c47c5a1a82238c8cbe2d3489392e0131dd..97e303522cae3eb046a019e16d972f9e0596d99a
@@@ -20,10 -20,10 +20,10 @@@ def getcaps()
      for mailcap in listmailcapfiles():
          try:
              fp = open(mailcap, 'r')
 -        except IOError:
 +        except OSError:
              continue
-         morecaps = readmailcapfile(fp)
-         fp.close()
+         with fp:
+             morecaps = readmailcapfile(fp)
          for key, value in morecaps.items():
              if not key in caps:
                  caps[key] = value
index d7161f81343f75dd0f9a026a8e01ba04cea7ab77,cdebf7a66d27fd19e3168883b12fd65fd7ee9be2..b98c8749f63221bf4043b19b5fd8eb5a72390b90
@@@ -361,11 -361,12 +361,12 @@@ def init(files=None)
  def read_mime_types(file):
      try:
          f = open(file)
 -    except IOError:
 +    except OSError:
          return None
-     db = MimeTypes()
-     db.readfp(f, True)
-     return db.types_map[True]
+     with f:
+         db = MimeTypes()
+         db.readfp(f, True)
+         return db.types_map[True]
  
  
  def _default_mime_types():
Simple merge