Skip to content

Commit bde7a18

Browse files
committed
[stdlib] harden bounds checking in Substring’s span
1 parent 0bbec0c commit bde7a18

File tree

1 file changed

+3
-7
lines changed

1 file changed

+3
-7
lines changed

stdlib/public/core/Substring.swift

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -761,9 +761,7 @@ extension Substring.UTF8View {
761761
let base: String.UTF8View = self._base
762762
let first = base._foreignDistance(from: base.startIndex, to: startIndex)
763763
let count = base._foreignDistance(from: startIndex, to: endIndex)
764-
let span = unsafe base.span._extracting(
765-
unchecked: Range(_uncheckedBounds: (first, first &+ count))
766-
)
764+
let span = unsafe base.span._extracting(first..<(first &+ count))
767765
return unsafe _overrideLifetime(span, borrowing: self)
768766
}
769767
#endif
@@ -778,10 +776,8 @@ extension Substring.UTF8View {
778776
return unsafe _overrideLifetime(span, borrowing: self)
779777
}
780778
_internalInvariant(_wholeGuts.isFastUTF8)
781-
let buffer = unsafe _wholeGuts._object.fastUTF8.extracting(
782-
Range(_uncheckedBounds: (first, end))
783-
)
784-
let span = unsafe Span(_unsafeElements: buffer)
779+
var span = unsafe Span(_unsafeElements: _wholeGuts._object.fastUTF8)
780+
span = span._extracting(first..<end)
785781
return unsafe _overrideLifetime(span, borrowing: self)
786782
}
787783
}

0 commit comments

Comments
 (0)