mirror of https://github.com/scrapy/scrapy.git
Log ignored responses exceeding DOWNLOAD_MAXSIZE
Signed-off-by: Mridankan Mandal <xerontitan90@gmail.com>
This commit is contained in:
parent
d8ba1571e7
commit
2fc74b8c9d
|
|
@ -123,12 +123,14 @@ class HttpCompressionMiddleware:
|
|||
response.body, content_encoding, max_size
|
||||
)
|
||||
except _DecompressionMaxSizeExceeded as e:
|
||||
raise IgnoreRequest(
|
||||
msg = (
|
||||
f"Ignored response {response} because its body "
|
||||
f"({len(response.body)} B compressed, "
|
||||
f"{e.decompressed_size} B decompressed so far) exceeded "
|
||||
f"DOWNLOAD_MAXSIZE ({max_size} B) during decompression."
|
||||
) from e
|
||||
)
|
||||
logger.warning(msg)
|
||||
raise IgnoreRequest(msg) from e
|
||||
if len(response.body) < warn_size <= len(decoded_body):
|
||||
logger.warning(
|
||||
f"{response} body size after decompression "
|
||||
|
|
|
|||
|
|
@ -538,9 +538,23 @@ class TestHttpCompression:
|
|||
mw.open_spider(spider)
|
||||
|
||||
response = self._getresponse(f"bomb-{compression_id}") # 11_511_612 B
|
||||
with pytest.raises(IgnoreRequest) as exc_info:
|
||||
with (
|
||||
LogCapture(
|
||||
"scrapy.downloadermiddlewares.httpcompression",
|
||||
propagate=False,
|
||||
level=WARNING,
|
||||
) as log,
|
||||
pytest.raises(IgnoreRequest) as exc_info,
|
||||
):
|
||||
mw.process_response(response.request, response)
|
||||
assert exc_info.value.__cause__.decompressed_size < 1_100_000
|
||||
log.check(
|
||||
(
|
||||
"scrapy.downloadermiddlewares.httpcompression",
|
||||
"WARNING",
|
||||
str(exc_info.value),
|
||||
),
|
||||
)
|
||||
|
||||
def test_compression_bomb_setting_br(self):
|
||||
_skip_if_no_br()
|
||||
|
|
|
|||
Loading…
Reference in New Issue