Skip to content

Commit 471e4e9

Browse files
authored
Merge pull request swiftlang#27827 from Catfish-Man/swift-5.1-branch
[5.1] Guard against passing endIndex to foreignScalarAlign when back-deploying to 5.0 stdlibs
2 parents 7e43e9b + c3c1053 commit 471e4e9

File tree

1 file changed

+7
-0
lines changed

1 file changed

+7
-0
lines changed

stdlib/public/core/UnicodeHelpers.swift

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -186,6 +186,13 @@ extension _StringGuts {
186186
return String.Index(_encodedOffset: idx._encodedOffset)._scalarAligned
187187
}
188188
if _slowPath(self.isForeign) {
189+
// In 5.1 this check was added to foreignScalarAlign, but when this is
190+
// emitted into a client that then runs against a 5.0 stdlib, it calls
191+
// a version of foreignScalarAlign that doesn't check for this, which
192+
// ends up asking CFString for its endIndex'th character, which throws
193+
// an exception. So we duplicate the check here for back deployment.
194+
guard idx._encodedOffset != self.count else { return idx._scalarAligned }
195+
189196
let foreignIdx = foreignScalarAlign(idx)
190197
_internalInvariant_5_1(foreignIdx._isScalarAligned)
191198
return foreignIdx

0 commit comments

Comments
 (0)