TextBoxView: fix crash during large selection with pending background layout#11461
Open
etvorun wants to merge 1 commit intodotnet:mainfrom
Open
TextBoxView: fix crash during large selection with pending background layout#11461etvorun wants to merge 1 commit intodotnet:mainfrom
etvorun wants to merge 1 commit intodotnet:mainfrom
Conversation
Contributor
There was a problem hiding this comment.
Pull request overview
This PR fixes a crash in TextBoxView that occurs during large text selection when incremental background layout is still in progress. The crash happened because GetLineIndexFromOffset assumed all requested offsets were within the currently measured _lineMetrics range, but during time-sliced layout, selection/highlight operations can request offsets beyond what has been measured so far.
Changes:
- Added defensive clamping in
GetLineIndexFromOffsetto return the last measured line index when offsets exceed the measured region during background layout - Removed overly strict
Contains(position)assertions from several ITextView methods that can be legitimately called during transitional layout states - Added documentation explaining the background layout handling in
GetLineIndexFromOffset
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
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.
Summary
Fixes a
TextBoxViewcrash path that can occur during large-text selection when layout is still in background progress.What changed
GetLineIndexFromOffsetwhen the requested offset is beyond the currently measured region.Invariant.Assert(Contains(position))checks from affected text-view operations that can be reached during transitional layout timing.Why
TextBoxViewuses incremental/time-sliced layout. During that window, selection/highlight paths can request offsets beyond the measured_lineMetricsrange. The defensive path prevents assertion/fail-fast and preserves expected behavior.Validation
TextBoxView.csonly.No errors foundfor the modified file).Fixes #11460
Microsoft Reviewers: Open in CodeFlow