Skip to content

Fix: ZipperHead fixes - #133

Merged
luketpeterson merged 4 commits into
Adam-Vandervorst:masterfrom
imlvts:fix/zipper-head-exclusive-over-empty-node
Sep 25, 2026
Merged

luketpeterson merged 4 commits into
Adam-Vandervorst:masterfrom
imlvts:fix/zipper-head-exclusive-over-empty-node

Conversation

@imlvts

@imlvts imlvts commented Sep 23, 2026

Copy link
Copy Markdown
Collaborator

Fix ZipperHead exclusive path at the head's own root
With an empty path and the head's root inside a node, the walk popped a
byte of the head's own path and never put it back. The next request then
read past its key buffer (UB in release) or panicked.

Fix zipper_head on a write zipper with a borrowed path
as_static_path_zipper asserted the zipper held no borrowed origin path,
but write_zipper_at_path always does. Once buffers are prepared the path
lives in prefix_buf, so drop the borrowed slice instead.

Fix ZipperHead exclusive paths over an empty node
make_cell_node called make_mut on the empty sentinel, which panics.
Replace the sentinel with a new CellByteNode instead.

imlvts and others added 4 commits September 23, 2026 04:08
With an empty path and the head's root inside a node, the walk popped a
byte of the head's own path and never put it back. The next request then
read past its key buffer (UB in release) or panicked.
as_static_path_zipper asserted the zipper held no borrowed origin path,
but write_zipper_at_path always does. Once buffers are prepared the path
lives in prefix_buf, so drop the borrowed slice instead.
make_cell_node called make_mut on the empty sentinel, which panics.
Replace the sentinel with a new CellByteNode instead.
@luketpeterson

Copy link
Copy Markdown
Collaborator

I was initially confused because this PR originally held 3 separate ZH fixes. But the PRs that came before it contained 2 of them.

So, on top of the master branch with the others merged, this PR covers the case where the an empty node sentinel needs be upgraded to a CellByteNode to support a ZipperHead.

Good fix. Merging.

@luketpeterson
luketpeterson merged commit 3038ac0 into Adam-Vandervorst:master Sep 25, 2026
4 checks passed
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.

2 participants