Skip to content

Support delete mode ('d') for in-memory zip streams (#333)#391

Merged
kuba-- merged 2 commits intomasterfrom
delete
Mar 8, 2026
Merged

Support delete mode ('d') for in-memory zip streams (#333)#391
kuba-- merged 2 commits intomasterfrom
delete

Conversation

@kuba--
Copy link
Owner

@kuba-- kuba-- commented Mar 8, 2026

Allow zip_stream_open to accept 'd' mode so callers can delete entries from an in-memory archive without duplicating the buffer. A dedicated write function (zip_stream_delete_write_func) keeps the same heap-write semantics as miniz but uses a distinct pointer so mz_zip_writer_end won't free the caller's buffer—no miniz changes required.

Seven new ASan-clean tests cover delete-by-name, delete-by-index, invalid indices, close-without-copy, open-then-close, delete-all, and multiple zip_stream_copy calls.

Allow zip_stream_open to accept 'd' mode so callers can delete entries from an in-memory archive without duplicating the buffer. A dedicated write function (zip_stream_delete_write_func) keeps the same heap-write semantics as miniz but uses a distinct pointer so mz_zip_writer_end won't free the caller's buffer—no miniz changes required. Seven new ASan-clean tests cover delete-by-name, delete-by-index, invalid indices, close-without-copy, open-then-close, delete-all, and multiple zip_stream_copy calls.
Copy link

Copilot AI left a comment

Choose a reason for hiding this comment

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

Pull request overview

Adds support for opening in-memory ZIP archives in delete mode ('d') so callers can remove entries from a memory-backed archive and then obtain the modified archive via zip_stream_copy(), without requiring miniz changes.

Changes:

  • Add a dedicated in-memory write callback for delete mode to avoid miniz freeing the caller’s buffer on close.
  • Extend zip_stream_openwitherror() to accept 'd' mode for memory streams.
  • Add a suite of stream-delete tests (delete by name/index, invalid indices, open/close cases, delete-all, multi-copy).

Reviewed changes

Copilot reviewed 3 out of 3 changed files in this pull request and generated 2 comments.

File Description
test/test_entry.c Adds new test coverage for stream-based delete mode workflows.
src/zip.h Documents new 'd' mode for zip_stream_open*() APIs.
src/zip.c Implements 'd' mode for stream open and a custom write function to preserve caller buffer ownership.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

You can also share your feedback on Copilot code review. Take the survey.

Copy link

Copilot AI commented Mar 8, 2026

@kuba-- I've opened a new pull request, #392, to work on those changes. Once the pull request is ready, I'll request review from you.

…ks (#392) * Initial plan * Remove unsupported 'a' mode from zip_stream_open*() doc blocks Co-authored-by: kuba-- <4056521+kuba--@users.noreply.github.com> --------- Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com> Co-authored-by: kuba-- <4056521+kuba--@users.noreply.github.com>
@kuba-- kuba-- merged commit 5a79b35 into master Mar 8, 2026
16 checks passed
@kuba-- kuba-- deleted the delete branch March 8, 2026 20:10
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

3 participants