fix(molang): prevent NaN diagnostic ranges from crashing the client#588
Merged
Merged
Conversation
A degenerate molang node (e.g. an empty `{}` produced by the parser for
particle component objects) has an undefined `position`. The Marker/default
case in the molang syntax diagnoser passed that undefined position straight
to `diagnoser.add`, where `GetRange` resolved it via `doc.positionAt(undefined)`
to a `character: NaN`. That NaN serializes to `null` over JSON-RPC, making the
client's `asDiagnostics` reject the entire diagnostic batch with 'Invalid
arguments' and drop all diagnostics for the file.
Fixes, in defense-in-depth layers:
- Guard the degenerate node's position with a finite fallback in the molang
syntax diagnoser.
- Clamp non-finite/out-of-bounds offsets to the document bounds in GetRange
and GetPosition so no caller can produce a NaN range.
Adds regression tests for both layers.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01HGuhKH5dAiLG2f19DJ39T7
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.
A degenerate molang node (e.g. an empty
{}produced by the parser for particle component objects) has an undefinedposition. The Marker/default case in the molang syntax diagnoser passed that undefined position straight todiagnoser.add, whereGetRangeresolved it viadoc.positionAt(undefined)to acharacter: NaN. That NaN serializes tonullover JSON-RPC, making the client'sasDiagnosticsreject the entire diagnostic batch with 'Invalid arguments' and drop all diagnostics for the file.Fixes, in defense-in-depth layers:
Adds regression tests for both layers.