File tree Expand file tree Collapse file tree 2 files changed +11
-13
lines changed Expand file tree Collapse file tree 2 files changed +11
-13
lines changed Original file line number Diff line number Diff line change @@ -568,14 +568,13 @@ extension RawSpan {
568
568
@_alwaysEmitIntoClient
569
569
public func byteOffsets( of span: borrowing Self ) -> Range < Int > ? {
570
570
if span. _count > _count { return nil }
571
- guard let subspanStart = span. _pointer, _count > 0 else {
572
- return _pointer == span. _pointer ? Range ( uncheckedBounds : ( 0 , 0 ) ) : nil
571
+ guard let spanStart = span. _pointer, _count > 0 else {
572
+ return _pointer == span. _pointer ? Range ( _uncheckedBounds : ( 0 , 0 ) ) : nil
573
573
}
574
- if subspanStart < _start { return nil }
575
- let lower = _start. distance ( to: subspanStart)
576
- let upper = lower + span. _count
577
- guard upper <= _count else { return nil }
578
- return Range ( uncheckedBounds: ( lower, upper) )
574
+ let spanEnd = spanStart + span. _count
575
+ if spanStart < _start || ( _start + _count) < spanEnd { return nil }
576
+ let lower = _start. distance ( to: spanStart)
577
+ return Range ( _uncheckedBounds: ( lower, lower &+ span. _count) )
579
578
}
580
579
}
581
580
Original file line number Diff line number Diff line change @@ -695,17 +695,16 @@ extension Span where Element: ~Copyable {
695
695
@_alwaysEmitIntoClient
696
696
public func indices( of span: borrowing Self ) -> Range < Index > ? {
697
697
if span. _count > _count { return nil }
698
- guard let subspanStart = span. _pointer, _count > 0 else {
698
+ guard let spanStart = span. _pointer, _count > 0 else {
699
699
return _pointer == span. _pointer ? Range ( _uncheckedBounds: ( 0 , 0 ) ) : nil
700
700
}
701
- if subspanStart < _start { return nil }
702
- let byteOffset = _start. distance ( to: subspanStart)
703
701
let stride = MemoryLayout< Element> . stride
702
+ let spanEnd = spanStart + stride&* span. _count
703
+ if spanStart < _start || spanEnd > ( _start + stride&* _count) { return nil }
704
+ let byteOffset = _start. distance ( to: spanStart)
704
705
let ( lower, r) = byteOffset. quotientAndRemainder ( dividingBy: stride)
705
706
guard r == 0 else { return nil }
706
- let upper = lower + span. _count
707
- guard upper <= _count else { return nil }
708
- return Range ( _uncheckedBounds: ( lower, upper) )
707
+ return Range ( _uncheckedBounds: ( lower, lower &+ span. _count) )
709
708
}
710
709
}
711
710
You can’t perform that action at this time.
0 commit comments