Skip to content

test: make gzip decompression-bomb regression test actually bite#7655

Open
anxkhn wants to merge 1 commit into
cortexproject:masterfrom
anxkhn:loop/cortex__002
Open

test: make gzip decompression-bomb regression test actually bite#7655
anxkhn wants to merge 1 commit into
cortexproject:masterfrom
anxkhn:loop/cortex__002

Conversation

@anxkhn

@anxkhn anxkhn commented Jun 29, 2026

Copy link
Copy Markdown

What this PR does:

TestParseProtoReader_GzipDecompressionBomb was added in #7515 to guard the
io.LimitReader(gzReader, maxSize+1) cap on gzip decompression, but it only
asserted assert.NotNil(t, err). That passes whether or not the cap is present:
decompressRequest's deferred len(body) > maxSize check rejects the oversized
body regardless, so the test never exercised the new wrapper and could silently
go to a no-op if the cap were removed.

This makes the test bite by asserting decompression stays bounded: with a tiny
gzip payload that inflates to 32 MB, the call must allocate under ~1 MB, which
only holds when the inner cap stops decompression early. Removing the cap blows
past the bound and fails the test (verified: ~16.8 MB allocated vs the 1 MB
bound).

It also adds TestParseProtoReader_Gzip covering the under-cap decode (passes)
and over-cap rejection, since the TestParseProtoReader table had no gzip case
at all.

Test-only change; no production code, config, or flags touched.

AI assistance: this change was prepared with help from an AI coding assistant.
I reviewed every line, validated the regression behavior locally, and can
explain the design (per GENAI_POLICY.md).

Which issue(s) this PR fixes:
Fixes #7581

Checklist

  • Tests updated
  • Documentation added (n/a, test-only)
  • CHANGELOG.md updated (n/a, not user-facing)
  • docs/configuration/v1-guarantees.md updated (n/a, no flags)

TestParseProtoReader_GzipDecompressionBomb only asserted that an error was
returned, which passes whether or not the maxSize+1 cap on the gzip reader is
present: the deferred size check in decompressRequest rejects the oversized body
regardless. Assert that the call stays bounded under ~maxSize of allocation so
removing the io.LimitReader cap fails the test. Add TestParseProtoReader_Gzip
covering the under-cap decode and over-cap rejection, which had no gzip
coverage. Fixes cortexproject#7581.

Signed-off-by: Anas Khan <83116240+anxkhn@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

V04 gzip-cap regression test in pkg/util/http_test.go passes whether or not the new decompressed-size cap is in place

1 participant