Closed
Description
Previous ID | SR-10689 |
Radar | rdar://79092495 |
Original Reporter | nanasi (JIRA User) |
Type | Bug |
Status | Resolved |
Resolution | Done |
Environment
Xcode 10.2
Apple Swift version 5.0 (swiftlang-1001.0.69.5 clang-1001.0.46.3)
Target: x86_64-apple-darwin18.5.0
Additional Detail from JIRA
Votes | 0 |
Component/s | Foundation |
Labels | Bug |
Assignee | @YOCKOW |
Priority | Medium |
md5: 9dd008936346109659158a2dac5cae0c
is duplicated by:
- SR-14792 Linux: Segmentation Fault with Data's lastRangeOf
Issue Description:
case 1
import Foundation
let data = Data([1, 2, 3])
print(data.range(of: Data([1, 2, 3]))) // print 0..<3
print(data.firstRange(of: Data([1, 2, 3]))) // print nil
case 2
import Foundation
let data = Data([1, 2, 3])
let range = data.startIndex..<data.endIndex
print(data.range(of: Data([1]), options: .backwards, in: range)) // print 0..<1
print(data.lastRange(of: Data([1]), in: range)) // causes EXC_BAD_INSTRUCTION
case 2 console:
error: Execution was interrupted, reason: EXC_BAD_INSTRUCTION (code=EXC_I386_INVOP, subcode=0x0).
The process has been left at the point where it was interrupted, use "thread return -x" to return to the state before expression evaluation.
* thread #​1, queue = 'com.apple.main-thread', stop reason = EXC_BAD_INSTRUCTION (code=EXC_I386_INVOP, subcode=0x0)
* frame #​0: 0x000000011b7092ad libswiftFoundation.dylib`Foundation.Data.subscript.read : (Swift.Int) -> Swift.UInt8 + 317
frame #​1: 0x00000001052d5117 libswiftCore.dylib`dispatch thunk of Swift.Collection.subscript.read : (A.Index) -> A.Element + 7
frame #​2: 0x000000011b6f9d5f libswiftFoundation.dylib`(extension in Foundation):Foundation.DataProtocol.lastRange<A, B where A1: Foundation.DataProtocol, B1: Swift.RangeExpression, A.Index == B1.Bound>(of: A1, in: B1) -> Swift.Optional<Swift.Range<A.Index>> + 1279
frame #​3: 0x00000001220a3662 $__lldb_expr38`main at Untitled Page 2.xcplaygroundpage:12:12
frame #​4: 0x0000000104f9b620 MyPlayground3`linkResources + 304
frame #​5: 0x0000000106e50aec CoreFoundation`__CFRUNLOOP_IS_CALLING_OUT_TO_A_BLOCK__ + 12
frame #​6: 0x0000000106e502b0 CoreFoundation`__CFRunLoopDoBlocks + 336
frame #​7: 0x0000000106e4ab34 CoreFoundation`__CFRunLoopRun + 1252
frame #​8: 0x0000000106e4a302 CoreFoundation`CFRunLoopRunSpecific + 626
frame #​9: 0x000000010ecfe2fe GraphicsServices`GSEventRunModal + 65
frame #​10: 0x000000010b017ba2 UIKitCore`UIApplicationMain + 140
frame #​11: 0x0000000104f9b6ed MyPlayground3`main + 205
frame #​12: 0x00000001087bd541 libdyld.dylib`start + 1
frame #​13: 0x00000001087bd541 libdyld.dylib`start + 1
and `lastRange(of: )` returns `firstRange(of:in: )` on master branch currently.
https://github.com/apple/swift-corelibs-foundation/blob/8043670b9d991d45ca72cfadc3806c68e9e16a05/Foundation/DataProtocol.swift#L82-L84