Skip to content

lzma_rust2 binding: keep the stream usable after LZMA_MEMLIMIT_ERROR - #228

Open
copybara-service[bot] wants to merge 1 commit into
mainfrom
test_1008872199
Open

copybara-service[bot] wants to merge 1 commit into
mainfrom
test_1008872199

Conversation

@copybara-service

Copy link
Copy Markdown

lzma_rust2 binding: keep the stream usable after LZMA_MEMLIMIT_ERROR

liblzma treats LZMA_MEMLIMIT_ERROR as non-fatal: the stream stays usable and the next
lzma_code call runs the limit check again from the same point in the input. The binding
latched the stream after any error and answered LZMA_PROG_ERROR from then on.

lzma_code now leaves the stream usable on LZMA_MEMLIMIT_ERROR only; a genuine allocation
failure (LZMA_MEM_ERROR) and all other errors still fail the stream, as in liblzma. The
consumed and produced counts of the failing call are recovered from the crate's counters, as
already done for a truncated input, so next_in moves past the header the decoder has already
taken and the caller does not feed it twice on the retry.

liblzma treats `LZMA_MEMLIMIT_ERROR` as non-fatal: the stream stays usable and the next
`lzma_code` call runs the limit check again from the same point in the input. The binding
latched the stream after any error and answered `LZMA_PROG_ERROR` from then on.

`lzma_code` now leaves the stream usable on `LZMA_MEMLIMIT_ERROR` only; a genuine allocation
failure (`LZMA_MEM_ERROR`) and all other errors still fail the stream, as in liblzma. The
consumed and produced counts of the failing call are recovered from the crate's counters, as
already done for a truncated input, so `next_in` moves past the header the decoder has already
taken and the caller does not feed it twice on the retry.

PiperOrigin-RevId: 1008872199
@google-cla

google-cla Bot commented Oct 28, 2026

Copy link
Copy Markdown

Thanks for your pull request! It looks like this may be your first contribution to a Google open source project. Before we can look at your pull request, you'll need to sign a Contributor License Agreement (CLA).

View this failed invocation of the CLA check for more information.

For the most up to date status, view the checks section at the bottom of the pull request.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant