Log ignored responses exceeding DOWNLOAD_MAXSIZE

Signed-off-by: Mridankan Mandal <xerontitan90@gmail.com>
This commit is contained in:
Mridankan Mandal 2026-07-13 01:45:10 +05:30
parent d8ba1571e7
commit 2fc74b8c9d
No known key found for this signature in database
GPG Key ID: C24AD565E950FF59
2 changed files with 19 additions and 3 deletions

View File

@ -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 "

View File

@ -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()