Skip to content

Fix greedy string leaving offset one past end of buffer - #315

Merged
keichi merged 1 commit into
masterfrom
fix-greedy-string-offset
Oct 18, 2026
Merged

keichi merged 1 commit into
masterfrom
fix-greedy-string-offset

Conversation

@keichi

@keichi keichi commented Oct 18, 2026

Copy link
Copy Markdown
Owner

Problem

A greedy string advanced offset with while(buffer.length > offset++);, which exits with offset === buffer.length + 1. Anything after the string (e.g. saveOffset) sees a wrong offset.

Repro

new Parser().string("s", { greedy: true }).saveOffset("o").parse(Buffer.from("ab"));
// { s: "ab", o: 3 }  -- expected o: 2

Fix

Replace the loop with offset = buffer.length;. The decoded value (subarray(start, offset)) is unchanged. Added a regression test in test/primitive_parser.ts.

@keichi
keichi merged commit 2fe1a02 into master Oct 18, 2026
8 checks passed
@keichi
keichi deleted the fix-greedy-string-offset branch October 18, 2026 14:10
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