Skip to content

bugfix: IndexOutOfRangeException in pathfinding due to byte overflow#832

Merged
sven-n merged 3 commits into
MUnique:masterfrom
eduardosmaniotto:bugfix/pathfind-overflow
Jul 17, 2026
Merged

bugfix: IndexOutOfRangeException in pathfinding due to byte overflow#832
sven-n merged 3 commits into
MUnique:masterfrom
eduardosmaniotto:bugfix/pathfind-overflow

Conversation

@eduardosmaniotto

@eduardosmaniotto eduardosmaniotto commented Jul 16, 2026

Copy link
Copy Markdown
Contributor

Two IndexOutOfRangeException bugs caused by byte arithmetic overflow when
monsters walk near map edges, plus additional performance improvements on the
hot neighbor-expansion path.

Bug fixes

Bug 1: Byte loop counter overflow in ScopedGridNetwork.PreparemaxX
is int (byte+byte promotes to int) but the loop used byte x. At offset 240
with segment length 16, maxX = 256. When x wraps from 255→0 the loop
continues, GetIndexOfPoint(0, y) returns -1, crashing on _gridNodes[-1].

Bug 2: Byte overflow in BaseGridNetwork.GetPossibleNextNodes direction
offsets
(byte)(node.X + (-1)) wraps to 255. The code accessed
grid[255, y] before the bounds check could reject it.

Additional fix in GetOffset(byte)(gridSize - segmentLength) wraps
negative values to large positives (e.g. (byte)(-6) = 250), pushing the
segment outside grid bounds.

Performance improvements (same hot path)

  • Unsigned range check(uint)x > 255 replaces two signed comparisons
    with one branch per axis.
  • Single grid readgrid[newX, newY] read once, reused for safezone
    check and cost mask, eliminating redundant byte[,] bounds checks.
  • Flat direction arrays — two sbyte[] instead of sbyte[,], removing 2D
    stride multiply and improving JIT bounds-check elimination.
  • Fixed latent cost bugnewG now uses the masked costToNode instead
    of raw this._grid[...], so safezone flags (bit 7) no longer corrupt path
    cost.

@gemini-code-assist

Copy link
Copy Markdown

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 critical IndexOutOfRangeException bugs in the pathfinding system caused by byte arithmetic overflows. By switching loop counters to integers, enforcing stricter bounds checking, and sanitizing offset calculations, the changes ensure that pathfinding operations remain stable even when monsters move near the edges of the map.

Highlights

  • Loop Counter Overflow Fix: Updated loop variables in ScopedGridNetwork from byte to int to prevent infinite loops caused by byte overflow when iterating near grid boundaries.
  • Bounds Checking Improvement: Refactored BaseGridNetwork to perform bounds checking before accessing the grid array, preventing IndexOutOfRangeException during pathfinding.
  • Offset Calculation Safety: Improved GetOffset logic by clamping values before casting to byte, ensuring segment offsets remain within valid grid bounds.
New Features

🧠 You can now enable Memory (public preview) 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 the 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 counterproductive. 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.

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

Copy link
Copy Markdown

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 introduces safety checks and fixes overflow bugs in the pathfinding grid networks. Specifically, it moves the bounds check in BaseGridNetwork to prevent out-of-bounds array access, changes loop counters from byte to int in ScopedGridNetwork to avoid infinite loops from overflow, and adds index validation. The reviewer noted that casting wrapped coordinates directly to byte in BaseGridNetwork can still cause logical bugs (like teleportation across the map edges) and suggested performing coordinate arithmetic using int before casting.

Important

The consumer version of Gemini Code Assist on GitHub is being sunset. Starting June 18, 2026, new organization installations will be blocked, and all code review activity will officially cease on July 17, 2026.
For more details on the timeline and next steps, please review the Help Documentation.

Comment thread src/Pathfinding/BaseGridNetwork.cs Outdated
@sven-n
sven-n merged commit 26fc908 into MUnique:master Jul 17, 2026
2 checks passed
@eduardosmaniotto
eduardosmaniotto deleted the bugfix/pathfind-overflow branch July 17, 2026 21:54
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