summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMickaël Schoentgen <contact@tiger-222.fr>2019-04-08 13:08:48 (GMT)
committerInada Naoki <songofacandy@gmail.com>2019-04-08 13:08:48 (GMT)
commit58721a903074d28151d008d8990c98fc31d1e798 (patch)
treea537b9670bde0862165535a378a9116e59283d2a
parent7a0630c530121725136526a88c49589b54da6492 (diff)
downloadcpython-58721a903074d28151d008d8990c98fc31d1e798.zip
cpython-58721a903074d28151d008d8990c98fc31d1e798.tar.gz
cpython-58721a903074d28151d008d8990c98fc31d1e798.tar.bz2
bpo-35416: fix potential resource warnings in distutils (GH-10918)
-rw-r--r--Lib/distutils/command/bdist_rpm.py3
-rw-r--r--Lib/distutils/command/bdist_wininst.py74
-rw-r--r--Lib/distutils/command/upload.py5
-rw-r--r--Misc/NEWS.d/next/Library/2018-12-05-09-55-05.bpo-35416.XALKZG.rst1
4 files changed, 44 insertions, 39 deletions
diff --git a/Lib/distutils/command/bdist_rpm.py b/Lib/distutils/command/bdist_rpm.py
index 02f10dd..20ca7ac 100644
--- a/Lib/distutils/command/bdist_rpm.py
+++ b/Lib/distutils/command/bdist_rpm.py
@@ -537,7 +537,8 @@ class bdist_rpm(Command):
'',
'%' + rpm_opt,])
if val:
- spec_file.extend(open(val, 'r').read().split('\n'))
+ with open(val) as f:
+ spec_file.extend(f.read().split('\n'))
else:
spec_file.append(default)
diff --git a/Lib/distutils/command/bdist_wininst.py b/Lib/distutils/command/bdist_wininst.py
index fde5675..1cf2e96 100644
--- a/Lib/distutils/command/bdist_wininst.py
+++ b/Lib/distutils/command/bdist_wininst.py
@@ -247,47 +247,49 @@ class bdist_wininst(Command):
self.announce("creating %s" % installer_name)
if bitmap:
- bitmapdata = open(bitmap, "rb").read()
+ with open(bitmap, "rb") as f:
+ bitmapdata = f.read()
bitmaplen = len(bitmapdata)
else:
bitmaplen = 0
- file = open(installer_name, "wb")
- file.write(self.get_exe_bytes())
- if bitmap:
- file.write(bitmapdata)
-
- # Convert cfgdata from unicode to ascii, mbcs encoded
- if isinstance(cfgdata, str):
- cfgdata = cfgdata.encode("mbcs")
-
- # Append the pre-install script
- cfgdata = cfgdata + b"\0"
- if self.pre_install_script:
- # We need to normalize newlines, so we open in text mode and
- # convert back to bytes. "latin-1" simply avoids any possible
- # failures.
- with open(self.pre_install_script, "r",
- encoding="latin-1") as script:
- script_data = script.read().encode("latin-1")
- cfgdata = cfgdata + script_data + b"\n\0"
- else:
- # empty pre-install script
+ with open(installer_name, "wb") as file:
+ file.write(self.get_exe_bytes())
+ if bitmap:
+ file.write(bitmapdata)
+
+ # Convert cfgdata from unicode to ascii, mbcs encoded
+ if isinstance(cfgdata, str):
+ cfgdata = cfgdata.encode("mbcs")
+
+ # Append the pre-install script
cfgdata = cfgdata + b"\0"
- file.write(cfgdata)
-
- # The 'magic number' 0x1234567B is used to make sure that the
- # binary layout of 'cfgdata' is what the wininst.exe binary
- # expects. If the layout changes, increment that number, make
- # the corresponding changes to the wininst.exe sources, and
- # recompile them.
- header = struct.pack("<iii",
- 0x1234567B, # tag
- len(cfgdata), # length
- bitmaplen, # number of bytes in bitmap
- )
- file.write(header)
- file.write(open(arcname, "rb").read())
+ if self.pre_install_script:
+ # We need to normalize newlines, so we open in text mode and
+ # convert back to bytes. "latin-1" simply avoids any possible
+ # failures.
+ with open(self.pre_install_script, "r",
+ encoding="latin-1") as script:
+ script_data = script.read().encode("latin-1")
+ cfgdata = cfgdata + script_data + b"\n\0"
+ else:
+ # empty pre-install script
+ cfgdata = cfgdata + b"\0"
+ file.write(cfgdata)
+
+ # The 'magic number' 0x1234567B is used to make sure that the
+ # binary layout of 'cfgdata' is what the wininst.exe binary
+ # expects. If the layout changes, increment that number, make
+ # the corresponding changes to the wininst.exe sources, and
+ # recompile them.
+ header = struct.pack("<iii",
+ 0x1234567B, # tag
+ len(cfgdata), # length
+ bitmaplen, # number of bytes in bitmap
+ )
+ file.write(header)
+ with open(arcname, "rb") as f:
+ file.write(f.read())
def get_installer_filename(self, fullname):
# Factored out to allow overriding in subclasses
diff --git a/Lib/distutils/command/upload.py b/Lib/distutils/command/upload.py
index 613ea71..11afa24 100644
--- a/Lib/distutils/command/upload.py
+++ b/Lib/distutils/command/upload.py
@@ -125,8 +125,9 @@ class upload(PyPIRCCommand):
data['comment'] = ''
if self.sign:
- data['gpg_signature'] = (os.path.basename(filename) + ".asc",
- open(filename+".asc", "rb").read())
+ with open(filename + ".asc", "rb") as f:
+ data['gpg_signature'] = (os.path.basename(filename) + ".asc",
+ f.read())
# set up the authentication
user_pass = (self.username + ":" + self.password).encode('ascii')
diff --git a/Misc/NEWS.d/next/Library/2018-12-05-09-55-05.bpo-35416.XALKZG.rst b/Misc/NEWS.d/next/Library/2018-12-05-09-55-05.bpo-35416.XALKZG.rst
new file mode 100644
index 0000000..66603bc
--- /dev/null
+++ b/Misc/NEWS.d/next/Library/2018-12-05-09-55-05.bpo-35416.XALKZG.rst
@@ -0,0 +1 @@
+Fix potential resource warnings in distutils. Patch by Mickaël Schoentgen.