From 650dbc13c82042b80fe4b63ac8e3dcefee35a4a7 Mon Sep 17 00:00:00 2001 From: ShikiSuen Date: Sat, 25 Mar 2023 20:06:57 +0800 Subject: [PATCH] IMEStateData // Prevent cursors from being out of bounds. --- Source/Modules/IMEStateData.swift | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/Source/Modules/IMEStateData.swift b/Source/Modules/IMEStateData.swift index 2d8bdc8c..19f428fa 100644 --- a/Source/Modules/IMEStateData.swift +++ b/Source/Modules/IMEStateData.swift @@ -62,11 +62,13 @@ public struct IMEStateData: IMEStateDataProtocol { /// 所以在這裡必須做糾偏處理。因為在用 Swift,所以可以用「.utf16」取代「NSString.length()」。 /// 這樣就可以免除不必要的類型轉換。 public var u16Cursor: Int { - displayedText.map(\.description)[0 ..< cursor].joined().utf16.count + let upperBound = max(0, min(cursor, displayedText.count)) + return displayedText.map(\.description)[0 ..< upperBound].joined().utf16.count } public var u16Marker: Int { - displayedText.map(\.description)[0 ..< marker].joined().utf16.count + let upperBound = max(0, min(marker, displayedText.count)) + return displayedText.map(\.description)[0 ..< upperBound].joined().utf16.count } public var u16MarkedRange: Range {