Skip to content

fix(diff): correct overlap detection and bounds in linear space Myers#46

Merged
KimNorgaard merged 2 commits intomainfrom
fix/overlap-detection-and-bounds
Mar 18, 2026
Merged

fix(diff): correct overlap detection and bounds in linear space Myers#46
KimNorgaard merged 2 commits intomainfrom
fix/overlap-detection-and-bounds

Conversation

@KimNorgaard
Copy link
Contributor

This commit resolves two critical pathfinding bugs in the linear space Myers algorithm (findMiddleSnake) that caused it to produce suboptimal diffs or silently fail to explore valid search spaces.

  1. Fix forward search overlap detection: During the forward search overlap check (when delta is odd), the algorithm incorrectly checked the reverse vector vr at offset + (delta - k). However, the reverse search already maps its furthest-reaching x bounds to the same forward diagonal k. Checking the wrong index caused the algorithm to miss the true optimal middle snake, leading to longer, suboptimal edit scripts. This is fixed by correctly checking reverseIdx := offset + k.

  2. Fix vector sizing and offset for negative delta: When sequence A is shorter than sequence B (delta < 0), the forward-diagonal k in the reverse search can reach down to -maxDiff + delta. Because offset was previously only adjusted for positive delta, calculating offset + k would result in negative indices. This caused the reverse search to silently trigger bounds checks and skip exploring half of its required search grid. The vectorSize and offset are now correctly adjusted when delta < 0 to accommodate the full bounds.

This commit resolves two critical pathfinding bugs in the linear space
Myers algorithm (`findMiddleSnake`) that caused it to produce suboptimal
diffs or silently fail to explore valid search spaces.

1. Fix forward search overlap detection:
During the forward search overlap check (when `delta` is odd), the
algorithm incorrectly checked the reverse vector `vr` at `offset + (delta - k)`.
However, the reverse search already maps its furthest-reaching `x` bounds
to the same forward diagonal `k`. Checking the wrong index caused the
algorithm to miss the true optimal middle snake, leading to longer,
suboptimal edit scripts. This is fixed by correctly checking
`reverseIdx := offset + k`.

2. Fix vector sizing and offset for negative delta:
When sequence A is shorter than sequence B (`delta < 0`), the forward-diagonal
`k` in the reverse search can reach down to `-maxDiff + delta`. Because
`offset` was previously only adjusted for positive `delta`, calculating
`offset + k` would result in negative indices. This caused the reverse search
to silently trigger bounds checks and skip exploring half of its required
search grid. The `vectorSize` and `offset` are now correctly adjusted when
`delta < 0` to accommodate the full bounds.
@KimNorgaard KimNorgaard requested review from a team and gh-netic-robot as code owners March 18, 2026 18:14
@gemini-code-assist
Copy link
Contributor

Summary of Changes

Hello, I'm Gemini Code Assist1! I'm currently reviewing this pull request and will post my feedback shortly. In the meantime, here's a summary to help you and other reviewers quickly get up to speed!

This pull request addresses two significant bugs in the linear space Myers diff algorithm's findMiddleSnake function. The changes ensure that the algorithm correctly identifies the optimal middle snake and explores the entire necessary search space, preventing suboptimal diff results and silent failures due to incorrect array indexing.

Highlights

  • Corrected overlap detection in Myers algorithm: Fixed an incorrect index calculation (offset + (delta - k) to offset + k) during the forward search overlap check, which previously led to suboptimal diffs by missing the true middle snake.
  • Improved vector sizing for negative delta: Adjusted the vectorSize and offset calculations for cases where delta < 0 to prevent negative array indices and ensure the full search space is explored, resolving silent failures in the reverse search.

🧠 New Feature in Public Preview: You can now enable Memory to help Gemini Code Assist learn from your team's feedback. This makes future code reviews more consistent and personalized to your project's style. Click here to enable Memory in your admin console.

Using Gemini Code Assist

The full guide for Gemini Code Assist can be found on our documentation page, here are some quick tips.

Invoking Gemini

You can request assistance from Gemini at any point by creating a comment using either /gemini <command> or @gemini-code-assist <command>. Below is a summary of the supported commands on the current page.

Feature Command Description
Code Review /gemini review Performs a code review for the current pull request in its current state.
Pull Request Summary /gemini summary Provides a summary of the current pull request in its current state.
Comment @gemini-code-assist Responds in comments when explicitly tagged, both in pull request comments and review comments.
Help /gemini help Displays a list of available commands.

Customization

To customize Gemini Code Assist for GitHub experience, repository maintainers can create a configuration file and/or provide a custom code review style guide (such as PEP-8 for Python) by creating and adding files to a .gemini/ folder in the base of the repository. Detailed instructions can be found here.

Limitations & Feedback

Gemini Code Assist may make mistakes. Please leave feedback on any instances where its feedback is incorrect or counter productive. You can react with 👍 and 👎 on @gemini-code-assist comments. If you're interested in giving your feedback about your experience with Gemini Code Assist for GitHub and other Google products, sign up here.

Footnotes

  1. Review the Privacy Notices, Generative AI Prohibited Use Policy, Terms of Service, and learn how to configure Gemini Code Assist in GitHub here. Gemini can make mistakes, so double check it and use code with caution.

Copy link
Contributor

@gemini-code-assist gemini-code-assist bot left a comment

Choose a reason for hiding this comment

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

Code Review

This pull request addresses two critical bugs in the linear space Myers diff algorithm (findMiddleSnake). The first fix correctly calculates the vector size and offset when the first sequence is shorter than the second (delta < 0), preventing silent out-of-bounds errors and ensuring the entire search space is covered. The second fix corrects the overlap detection logic during the forward search, ensuring the algorithm finds the truly optimal edit script by checking the correct index in the reverse search vector. The changes are well-explained and appear to correctly resolve the bugs. I have one minor suggestion to improve the code's readability for future maintenance.

Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
Copy link
Contributor

@ChBLA ChBLA left a comment

Choose a reason for hiding this comment

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

Looks good

@KimNorgaard KimNorgaard merged commit e5b5459 into main Mar 18, 2026
1 check passed
@KimNorgaard KimNorgaard deleted the fix/overlap-detection-and-bounds branch March 18, 2026 18:28
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