Fix panic in LSP formatting with multi-byte characters and trailing newlines #1391
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.
This PR fixes a panic that occurs when formatting files from VSCode if the file contains multi-byte characters (e.g.,
β
,π
or Japanese characters likeζ₯ζ¬θͺ
) and ends with 2+ newlines.Problem
The panic occurred in the
PositionToLineAndCharacter
function ininternal/ls/converters.go
when trying to slice text with bounds[start:position]
whereposition
could exceed the actual text length:Root Cause
When the formatter generates text edits for files with multi-byte characters and trailing newlines, it can create ranges that extend beyond the actual text length. The
PositionToLineAndCharacter
function didn't handle this case properly, leading to a "slice bounds out of range" panic.Solution
Added a bounds check to ensure that
position
never exceeds the actual text length before attempting to slice the text:This ensures that even if the formatter or other components pass positions beyond the text length, the converter will handle them gracefully by treating them as positions at the end of the text.
Testing
The fix is minimal, safe, and maintains backward compatibility while resolving the panic.
Fixes #1389.
π¬ Share your feedback on Copilot coding agent for the chance to win a $200 gift card! Click here to start the survey.