Skip to content

zstd: cap buffer at max instead of aborting on overshoot [Backport to 4.2]#11900

Merged
cosmo0920 merged 1 commit into
4.2from
fix/zstd-decompression-limit-4.2
Jun 3, 2026
Merged

zstd: cap buffer at max instead of aborting on overshoot [Backport to 4.2]#11900
cosmo0920 merged 1 commit into
4.2from
fix/zstd-decompression-limit-4.2

Conversation

@cosmo0920
Copy link
Copy Markdown
Contributor

Backporting of #11854.


Enter [N/A] in the box, if an item is not applicable to your change.

Testing
Before we can approve your change; please submit the following in a comment:

  • Example configuration file for the change
  • Debug log output from testing the change
  • Attached Valgrind output that shows no leaks or memory corruption was found

If this is a change to packaging of containers or native binaries then please confirm it works for all targets.

  • Run local packaging test showing all targets (including any new ones) build.
  • Set ok-package-test label to test for all targets (requires maintainer to do).

Documentation

  • Documentation required for this feature

Backporting

  • Backport to latest stable release.

Fluent Bit is licensed under Apache 2.0, by submitting this pull request I understand that this code will be released under the terms of that license.

When the streaming decompression buffer doubles past the 100 MB limit,
cap the allocation at FLB_ZSTD_DECOMPRESS_MAX instead of immediately
aborting. This allows payloads between the last power-of-two (64 MB)
and the 100 MB limit to decompress successfully. Only abort when the
buffer is already at the maximum and still needs more space.

Signed-off-by: Tristan <tristan@talencesecurity.com>
@cosmo0920 cosmo0920 requested a review from edsiper as a code owner June 3, 2026 01:47
@coderabbitai
Copy link
Copy Markdown

coderabbitai Bot commented Jun 3, 2026

Important

Review skipped

Auto reviews are disabled on base/target branches other than the default branch.

Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: e0d40259-0017-4409-88b1-b1ae994c6cea

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch fix/zstd-decompression-limit-4.2

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

Copy link
Copy Markdown

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: cbbe5b6bc9

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread src/flb_zstd.c

/* check if we need more space */
if (output.pos == out_size) {
if (out_size >= FLB_ZSTD_DECOMPRESS_MAX) {
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Allow exact-size unknown zstd frames

For frames with ZSTD_CONTENTSIZE_UNKNOWN, this rejects a valid payload whose decompressed size is exactly FLB_ZSTD_DECOMPRESS_MAX: after the final ZSTD_decompressStream() call fills the 100 MB buffer, ret can already be 0, but this check runs before the existing ret == 0 completion check and returns failure. Known-size frames of exactly 100 MB are accepted by the new size > FLB_ZSTD_DECOMPRESS_MAX guard, so the limit is inconsistent and unknown-size inputs at the documented maximum are unnecessarily dropped.

Useful? React with 👍 / 👎.

@cosmo0920 cosmo0920 added this to the Fluent Bit v4.2.5 milestone Jun 3, 2026
@cosmo0920 cosmo0920 merged commit 50c2b7a into 4.2 Jun 3, 2026
25 checks passed
@cosmo0920 cosmo0920 deleted the fix/zstd-decompression-limit-4.2 branch June 3, 2026 02:44
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.

1 participant