Skip to content

Commit 99887c2

Browse files
committed
Fix crash when surrogate pair handling multibyte Unicode characters
1 parent 278cd39 commit 99887c2

File tree

1 file changed

+6
-6
lines changed

1 file changed

+6
-6
lines changed

src/SIL.Machine/PunctuationAnalysis/TextSegment.cs

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -187,13 +187,13 @@ public class SurrogatePairString
187187
public SurrogatePairString(string stringValue)
188188
{
189189
_stringValue = stringValue;
190-
IEnumerable<(int SurrogatePairIndex, int StringIndex)> indexPairs = _stringValue
191-
.Select((c, i) => (c, i))
190+
IEnumerable<(int StringIndex, int SurrogatePairIndex)> indexPairs = _stringValue
191+
.Select((c, stringIndex) => (c, stringIndex))
192192
.Where(tup => !char.IsLowSurrogate(tup.c))
193-
.Select((tup, i) => (tup.i, i));
193+
.Select((tup, surrogatePairIndex) => (tup.stringIndex, surrogatePairIndex));
194194
_surrogatePairIndexByStringIndex = new Dictionary<int, int>();
195195
_stringIndexBySurrogatePairIndex = new Dictionary<int, int>();
196-
foreach ((int surrogatePairIndex, int stringIndex) in indexPairs)
196+
foreach ((int stringIndex, int surrogatePairIndex) in indexPairs)
197197
{
198198
_surrogatePairIndexByStringIndex[stringIndex] = surrogatePairIndex;
199199
_stringIndexBySurrogatePairIndex[surrogatePairIndex] = stringIndex;
@@ -251,11 +251,11 @@ public string Substring(int startSurrogatePairIndex, int length)
251251

252252
public int GetStringIndexForSurrogatePairIndex(int surrogatePairIndex)
253253
{
254-
if (surrogatePairIndex == _surrogatePairIndexByStringIndex.Count)
254+
if (surrogatePairIndex == _stringIndexBySurrogatePairIndex.Count)
255255
{
256256
return _stringValue.Length;
257257
}
258-
return _surrogatePairIndexByStringIndex[surrogatePairIndex];
258+
return _stringIndexBySurrogatePairIndex[surrogatePairIndex];
259259
}
260260
}
261261
}

0 commit comments

Comments
 (0)