-
-
Notifications
You must be signed in to change notification settings - Fork 978
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
fix: TextBlock enters an infinite loop if the given available space is too small to fit even one character. #2598
Conversation
…s too small to fit even one character.
@dotnet-policy-service agree |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Thanks for the contribution. One small note, looks good otherwise !
@@ -329,7 +330,13 @@ private void UpdateWrappedText(Vector3 availableSpace) | |||
} | |||
|
|||
// we reached the end of the line. | |||
if (indexOfLastSpace < 0) // no space in the line | |||
if (currentLine.Length <= 1 || CalculateTextSize(currentLine).X <= 0) // just one or all empty characters... just go one by one. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Couldn't you replace CalculateTextSize(currentLine).X <= 0
with lineCurrentSize <= 0
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Sorry for the late reply, had been on a vacation lately. You're right, they are equivalent. I'll clean it up a bit.
It is the same value as lineCurrentSize. Signed-off-by: net2cn <[email protected]>
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
From a quick reading it looks good to me. I'll let other people do another check, if possible.
Thanks ! |
PR Details
If TextBlock is given an available space that the width is so small to fit in even one character, TextBlock will enter an infinite loop of repeatedly adding and removing the first character, and creating a new line in the wrapped text. This unexpected infinite loop will crash the editor due to a memory leak.
With this PR, the wrapped text will have at least one character (even if the character is zero width) from the original text in each new line.
(Wrap Text option disabled, horizontal overflow)
(Wrap Text option enabled with the fix, horizontal wrapped with vertical overflow. Without this fix the engine will crash eventually given enough time)
Related Issue
Fixes #2514
Types of changes
Checklist