Skip to content

Commit 15a3058

Browse files
committed
fix resource warning in GzipFile if anything in the ctor fails such as zlib.compressobj
1 parent 8e54c5b commit 15a3058

File tree

1 file changed

+43
-42
lines changed

1 file changed

+43
-42
lines changed

Lib/gzip.py

Lines changed: 43 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -202,50 +202,51 @@ def __init__(self, filename=None, mode=None,
202202
raise ValueError("Invalid mode: {!r}".format(mode))
203203
if mode and 'b' not in mode:
204204
mode += 'b'
205-
if fileobj is None:
206-
fileobj = self.myfileobj = builtins.open(filename, mode or 'rb')
207-
if filename is None:
208-
filename = getattr(fileobj, 'name', '')
209-
if not isinstance(filename, (str, bytes)):
210-
filename = ''
211-
else:
212-
filename = os.fspath(filename)
213-
origmode = mode
214-
if mode is None:
215-
mode = getattr(fileobj, 'mode', 'rb')
216-
217-
218-
if mode.startswith('r'):
219-
self.mode = READ
220-
raw = _GzipReader(fileobj)
221-
self._buffer = io.BufferedReader(raw)
222-
self.name = filename
223-
224-
elif mode.startswith(('w', 'a', 'x')):
225-
if origmode is None:
226-
import warnings
227-
warnings.warn(
228-
"GzipFile was opened for writing, but this will "
229-
"change in future Python releases. "
230-
"Specify the mode argument for opening it for writing.",
231-
FutureWarning, 2)
232-
self.mode = WRITE
233-
self._init_write(filename)
234-
self.compress = zlib.compressobj(compresslevel,
235-
zlib.DEFLATED,
236-
-zlib.MAX_WBITS,
237-
zlib.DEF_MEM_LEVEL,
238-
0)
239-
self._write_mtime = mtime
240-
self._buffer_size = _WRITE_BUFFER_SIZE
241-
self._buffer = io.BufferedWriter(_WriteBufferStream(self),
242-
buffer_size=self._buffer_size)
243-
else:
244-
raise ValueError("Invalid mode: {!r}".format(mode))
245-
246-
self.fileobj = fileobj
247205

248206
try:
207+
if fileobj is None:
208+
fileobj = self.myfileobj = builtins.open(filename, mode or 'rb')
209+
if filename is None:
210+
filename = getattr(fileobj, 'name', '')
211+
if not isinstance(filename, (str, bytes)):
212+
filename = ''
213+
else:
214+
filename = os.fspath(filename)
215+
origmode = mode
216+
if mode is None:
217+
mode = getattr(fileobj, 'mode', 'rb')
218+
219+
220+
if mode.startswith('r'):
221+
self.mode = READ
222+
raw = _GzipReader(fileobj)
223+
self._buffer = io.BufferedReader(raw)
224+
self.name = filename
225+
226+
elif mode.startswith(('w', 'a', 'x')):
227+
if origmode is None:
228+
import warnings
229+
warnings.warn(
230+
"GzipFile was opened for writing, but this will "
231+
"change in future Python releases. "
232+
"Specify the mode argument for opening it for writing.",
233+
FutureWarning, 2)
234+
self.mode = WRITE
235+
self._init_write(filename)
236+
self.compress = zlib.compressobj(compresslevel,
237+
zlib.DEFLATED,
238+
-zlib.MAX_WBITS,
239+
zlib.DEF_MEM_LEVEL,
240+
0)
241+
self._write_mtime = mtime
242+
self._buffer_size = _WRITE_BUFFER_SIZE
243+
self._buffer = io.BufferedWriter(_WriteBufferStream(self),
244+
buffer_size=self._buffer_size)
245+
else:
246+
raise ValueError("Invalid mode: {!r}".format(mode))
247+
248+
self.fileobj = fileobj
249+
249250
if self.mode == WRITE:
250251
self._write_gzip_header(compresslevel)
251252
except:

0 commit comments

Comments
 (0)