Skip to content

Commit c2e2fdd

Browse files
committed
Proper use of errorBuffer for expanded error messages
1 parent ae20b00 commit c2e2fdd

File tree

2 files changed

+9
-5
lines changed

2 files changed

+9
-5
lines changed

Foundation/URLSession/http/EasyHandle.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ internal final class _EasyHandle {
5656
fileprivate var headerList: _CurlStringList?
5757
fileprivate var pauseState: _PauseState = []
5858
internal var timeoutTimer: _TimeoutSource!
59-
private static var errorBuffer = [UInt8](repeating: 0, count: Int(CFURLSessionEasyErrorSize))
59+
internal lazy var errorBuffer = [UInt8](repeating: 0, count: Int(CFURLSessionEasyErrorSize))
6060
#if os(Android)
6161
static fileprivate var _CAInfoFile: UnsafeMutablePointer<Int8>?
6262
#endif
@@ -147,7 +147,7 @@ extension _EasyHandle {
147147
/// Set error buffer for error messages
148148
/// - SeeAlso: https://curl.haxx.se/libcurl/c/CURLOPT_ERRORBUFFER.html
149149
func set(errorBuffer buffer: UnsafeMutableBufferPointer<UInt8>?) {
150-
let buffer = buffer ?? _EasyHandle.errorBuffer.withUnsafeMutableBufferPointer { $0 }
150+
let buffer = buffer ?? errorBuffer.withUnsafeMutableBufferPointer { $0 }
151151
try! CFURLSession_easy_setopt_ptr(rawHandle, CFURLSessionOptionERRORBUFFER, buffer.baseAddress).asError()
152152
}
153153
/// Request failure on HTTP response >= 400

Foundation/URLSession/http/MultiHandle.swift

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -214,9 +214,13 @@ fileprivate extension URLSession._MultiHandle {
214214
}
215215
let easyHandle = easyHandles[idx]
216216
// Find the NSURLError code
217-
let error = easyHandle.urlErrorCode(for: easyCode).map {
218-
NSError(domain: NSURLErrorDomain, code: $0, userInfo: [
219-
NSLocalizedDescriptionKey: CFURLSessionCreateErrorDescription(easyCode.value)._swiftObject
217+
var error: NSError?
218+
if let errorCode = easyHandle.urlErrorCode(for: easyCode) {
219+
let errorDescription = easyHandle.errorBuffer[0] != 0 ?
220+
String(cString: easyHandle.errorBuffer) :
221+
CFURLSessionCreateErrorDescription(easyCode.value)._swiftObject
222+
error = NSError(domain: NSURLErrorDomain, code: errorCode, userInfo: [
223+
NSLocalizedDescriptionKey: errorDescription
220224
])
221225
}
222226
completedTransfer(forEasyHandle: easyHandle, error: error)

0 commit comments

Comments
 (0)