From: Serhiy Storchaka Date: Sat, 25 Jan 2014 17:43:56 +0000 (+0200) Subject: Issue #20331: Fixed possible FD leaks in various modules: X-Git-Tag: v3.4.0b3~17 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=c0b0bb6e01f7ea6a1a857609e794842223c4aa5c;p=thirdparty%2FPython%2Fcpython.git Issue #20331: Fixed possible FD leaks in various modules: http.server, imghdr, mailcap, mimetypes, xml.etree. --- c0b0bb6e01f7ea6a1a857609e794842223c4aa5c diff --cc Lib/http/server.py index f17074700dec,dab1eb65c4bc..f019bd9fc3ca --- a/Lib/http/server.py +++ b/Lib/http/server.py @@@ -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/mailcap.py index bd61b0b0ae94,0c0b19c47c5a..97e303522cae --- a/Lib/mailcap.py +++ b/Lib/mailcap.py @@@ -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 diff --cc Lib/mimetypes.py index d7161f81343f,cdebf7a66d27..b98c8749f632 --- a/Lib/mimetypes.py +++ b/Lib/mimetypes.py @@@ -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():