[rh/urllib] Simplify gzip decoding (#7611)

Authored by: Grub4K
This commit is contained in:
Simon Sawicki 2023-08-27 00:13:30 +02:00 committed by GitHub
parent 1be0a96a4d
commit 59e92b1f18
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -1,7 +1,6 @@
from __future__ import annotations from __future__ import annotations
import functools import functools
import gzip
import http.client import http.client
import io import io
import socket import socket
@ -155,20 +154,9 @@ class HTTPHandler(urllib.request.AbstractHTTPHandler):
@staticmethod @staticmethod
def gz(data): def gz(data):
gz = gzip.GzipFile(fileobj=io.BytesIO(data), mode='rb') # There may be junk added the end of the file
try: # We ignore it by only ever decoding a single gzip payload
return gz.read() return zlib.decompress(data, wbits=zlib.MAX_WBITS | 16)
except OSError as original_oserror:
# There may be junk add the end of the file
# See http://stackoverflow.com/q/4928560/35070 for details
for i in range(1, 1024):
try:
gz = gzip.GzipFile(fileobj=io.BytesIO(data[:-i]), mode='rb')
return gz.read()
except OSError:
continue
else:
raise original_oserror
def http_request(self, req): def http_request(self, req):
# According to RFC 3986, URLs can not contain non-ASCII characters, however this is not # According to RFC 3986, URLs can not contain non-ASCII characters, however this is not