From 035034430ee901a9134e704e49f36224f9445b5b Mon Sep 17 00:00:00 2001 From: Shadowfacts Date: Sun, 9 Oct 2022 20:39:17 -0400 Subject: [PATCH] Fix crash when hovering with the cursor over certain text views Closes #183 --- Tusker/Views/ContentTextView.swift | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/Tusker/Views/ContentTextView.swift b/Tusker/Views/ContentTextView.swift index c485ed1b..e3c47c40 100644 --- a/Tusker/Views/ContentTextView.swift +++ b/Tusker/Views/ContentTextView.swift @@ -221,7 +221,9 @@ class ContentTextView: LinkTextView, BaseEmojiLabel { let charIndex = lineFragment.characterIndex(for: pointInLineFragment) var range = NSRange() - guard let link = lineFragment.attributedString.attribute(.link, at: charIndex, longestEffectiveRange: &range, in: lineFragment.attributedString.fullRange) as? URL else { + // sometimes characterIndex(for:) returns NSNotFound even for points that are in the line fragment's typographic bounds (see #183), so we check just in case + guard charIndex != NSNotFound, + let link = lineFragment.attributedString.attribute(.link, at: charIndex, longestEffectiveRange: &range, in: lineFragment.attributedString.fullRange) as? URL else { return nil } // lineFragment.attributedString is the NSTextLayoutFragment's string, and so range is in its index space