Fix out-of-bounds write when a clip path lies outside the image - #591
Open
Graveflo wants to merge 1 commit into
Open
Fix out-of-bounds write when a clip path lies outside the image#591Graveflo wants to merge 1 commit into
Graveflo wants to merge 1 commit into
Conversation
Graveflo
marked this pull request as draft
July 30, 2026 17:19
Graveflo
marked this pull request as ready for review
July 30, 2026 19:08
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
FYI
masterSummary
Context.clipwith a clip region that lies fully outside the canvas writesoutside the image buffer. Depending on where the write lands it raises
IndexDefector segfaults inside the SIMD fill.A clip region outside the canvas is ordinary Canvas2D usage — it is what you get
when clipping to something that has scrolled off — so this is reachable from the
public API without doing anything unusual.
Reproduced against 6.1.0 and against current
master.Reproduction
Performance
The patch changes behavior in three of the four off-canvas directions. Only one
of those three has a "before" time worth comparing, because the other two
crashed:
So the case that gets slower is the one that previously produced a wrong result
without faulting: a
MaskBlendfill whose path lies entirely right of thecanvas, which is the
pathWidth == 0early return.How much, per
ctx.clip()call:+5 to +59 µs on a call that already costs 97 to 1,044 µs — about 5%, scaling
with canvas area as any mask operation does.
After the fix, clipping to an off-canvas region costs the same as clipping to an on-canvas one.