mirror of
https://github.com/python/cpython.git
synced 2024-11-24 02:15:30 +08:00
Issue #20331: Fixed possible FD leaks in various modules:
http.server, imghdr, mailcap, mimetypes, xml.etree.
This commit is contained in:
parent
933209689e
commit
91b0bc237c
@ -670,8 +670,10 @@ class SimpleHTTPRequestHandler(BaseHTTPRequestHandler):
|
||||
"""Serve a GET request."""
|
||||
f = self.send_head()
|
||||
if f:
|
||||
self.copyfile(f, self.wfile)
|
||||
f.close()
|
||||
try:
|
||||
self.copyfile(f, self.wfile)
|
||||
finally:
|
||||
f.close()
|
||||
|
||||
def do_HEAD(self):
|
||||
"""Serve a HEAD request."""
|
||||
@ -712,13 +714,17 @@ class SimpleHTTPRequestHandler(BaseHTTPRequestHandler):
|
||||
except IOError:
|
||||
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).
|
||||
|
@ -7,18 +7,16 @@ __all__ = ["what"]
|
||||
#-------------------------#
|
||||
|
||||
def what(file, h=None):
|
||||
if h is None:
|
||||
if isinstance(file, str):
|
||||
f = open(file, 'rb')
|
||||
h = f.read(32)
|
||||
else:
|
||||
location = file.tell()
|
||||
h = file.read(32)
|
||||
file.seek(location)
|
||||
f = None
|
||||
else:
|
||||
f = None
|
||||
f = None
|
||||
try:
|
||||
if h is None:
|
||||
if isinstance(file, str):
|
||||
f = open(file, 'rb')
|
||||
h = f.read(32)
|
||||
else:
|
||||
location = file.tell()
|
||||
h = file.read(32)
|
||||
file.seek(location)
|
||||
for tf in tests:
|
||||
res = tf(h, f)
|
||||
if res:
|
||||
|
@ -22,8 +22,8 @@ def getcaps():
|
||||
fp = open(mailcap, 'r')
|
||||
except IOError:
|
||||
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
|
||||
|
@ -363,9 +363,10 @@ def read_mime_types(file):
|
||||
f = open(file)
|
||||
except IOError:
|
||||
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():
|
||||
|
@ -76,14 +76,13 @@ class FatalIncludeError(SyntaxError):
|
||||
|
||||
def default_loader(href, parse, encoding=None):
|
||||
if parse == "xml":
|
||||
file = open(href, 'rb')
|
||||
data = ElementTree.parse(file).getroot()
|
||||
with open(href, 'rb') as file:
|
||||
data = ElementTree.parse(file).getroot()
|
||||
else:
|
||||
if not encoding:
|
||||
encoding = 'UTF-8'
|
||||
file = open(href, 'r', encoding=encoding)
|
||||
data = file.read()
|
||||
file.close()
|
||||
with open(href, 'r', encoding=encoding) as file:
|
||||
data = file.read()
|
||||
return data
|
||||
|
||||
##
|
||||
|
Loading…
Reference in New Issue
Block a user