Skip to content

Commit 3054972

Browse files
authored
Fix crash when intercepting URLSessionUploadTask. (#133)
Per https://developer.apple.com/documentation/foundation/urlsession/1411518-uploadtask, body data parameter may be null.
1 parent f6f7be1 commit 3054972

File tree

1 file changed

+4
-5
lines changed

1 file changed

+4
-5
lines changed

Sources/NetworkInjector+URLSession.swift

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -316,19 +316,18 @@ extension NetworkInjector {
316316

317317
// For safety, we should cast to AnyObject
318318
// To prevent app crashes in the future if the object type is changed
319-
typealias NewClosureType = @convention(c) (AnyObject, Selector, AnyObject, AnyObject, AnyObject) -> AnyObject
319+
typealias NewClosureType = @convention(c) (AnyObject, Selector, AnyObject, AnyObject?, AnyObject) -> AnyObject
320320
let originalImp: IMP = method_getImplementation(method)
321-
let block: @convention(block) (AnyObject, AnyObject, AnyObject, AnyObject) -> AnyObject = {[weak self](me, request, data, block) in
321+
let block: @convention(block) (AnyObject, AnyObject, AnyObject?, AnyObject) -> AnyObject = {[weak self](me, request, data, block) in
322322

323323
// call the original
324324
let original: NewClosureType = unsafeBitCast(originalImp, to: NewClosureType.self)
325325
let task = original(me, selector, request, data, block)
326326

327327
// Safe-check
328328
if let task = task as? URLSessionTask,
329-
let request = request as? NSURLRequest,
330-
let data = data as? Data {
331-
self?.delegate?.injectorSessionDidUpload(task: task, request: request, data: data)
329+
let request = request as? NSURLRequest {
330+
self?.delegate?.injectorSessionDidUpload(task: task, request: request, data: data as? Data)
332331
} else {
333332
assertionFailure("Could not get data from _swizzleURLSessionUploadSelector. It might causes due to the latest iOS changes. Please contact the author!")
334333
}

0 commit comments

Comments
 (0)