Skip to content

Do not raise Zlib::BufError when the dictionary id ends the available input - #173

Open
segiddins wants to merge 1 commit into
ruby:masterfrom
segiddins:segiddins/inflate-add-dictionary-buferror
Open

segiddins wants to merge 1 commit into
ruby:masterfrom
segiddins:segiddins/inflate-add-dictionary-buferror

Conversation

@segiddins

@segiddins segiddins commented Oct 26, 2026 •

Copy link
Copy Markdown
Contributor

After Zlib::Inflate#add_dictionary has supplied the dictionary, zstream_run_try sets it and calls inflate() again at once. If the dictionary id was the last byte fed so far, that call has no input and returns Z_BUF_ERROR, which was raised although the dictionary was applied and the stream is fine.

d = Zlib::Deflate.new
d.set_dictionary("hello world")
data = d.deflate("hello", Zlib::FINISH)
z = Zlib::Inflate.new
z.add_dictionary("hello world")
data.each_byte { |b| z.inflate(b.chr) }
# expected: no error
# actual:   Zlib::BufError at the byte that completes the dictionary id

Only re-enter inflate() when input remains.

🤖 Generated with Claude Code

… input

After Zlib::Inflate#add_dictionary has supplied the dictionary, zstream_run_try sets it and calls inflate() again at once. If the dictionary id was the last byte fed so far, that call has no input and returns Z_BUF_ERROR, which was raised although the dictionary was applied and the stream is fine.

```ruby
d = Zlib::Deflate.new
d.set_dictionary("hello world")
data = d.deflate("hello", Zlib::FINISH)
z = Zlib::Inflate.new
z.add_dictionary("hello world")
data.each_byte { |b| z.inflate(b.chr) }
# expected: no error
# actual:   Zlib::BufError at the byte that completes the dictionary id
```

Only re-enter inflate() when input remains.

Co-Authored-By: Claude Mythos 5.1 <noreply@anthropic.com>
@segiddins
segiddins force-pushed the segiddins/inflate-add-dictionary-buferror branch from 34c573a to 44dc344 Compare October 26, 2026 18:01

This branch has not been deployed

No deployments
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