Avoid crashing when connecting to empty host. (#103)
Motivation: Network.framework will crash when we attempt to connect to the host string "". That's not ideal, so we should detect that case and avoid it. Modifications: - Add code to detect the empty host string. Result: No crashes when accidentally connecting to "".
This commit is contained in:
parent
71dbab3f12
commit
bb56586c4c
|
|
@ -500,6 +500,16 @@ extension NIOTSConnectionChannel: StateManagedChannel {
|
|||
internal func beginActivating0(to target: NWEndpoint, promise: EventLoopPromise<Void>?) {
|
||||
assert(self.nwConnection == nil)
|
||||
assert(self.connectPromise == nil)
|
||||
|
||||
// Before we start, we validate that the target won't cause a crash: see
|
||||
// https://github.com/apple/swift-nio/issues/1617.
|
||||
if case .hostPort(host: let host, port: _) = target, host == "" {
|
||||
// We don't pass the promise in here because we'll actually not complete it. We complete it manually ourselves.
|
||||
self.close0(error: NIOTSErrors.InvalidHostname(), mode: .all, promise: nil)
|
||||
promise?.fail(NIOTSErrors.InvalidHostname())
|
||||
return
|
||||
}
|
||||
|
||||
self.connectPromise = promise
|
||||
|
||||
let parameters = NWParameters(tls: self.tlsOptions, tcp: self.tcpOptions)
|
||||
|
|
|
|||
|
|
@ -69,5 +69,10 @@ public enum NIOTSErrors {
|
|||
self.timeout = timeout
|
||||
}
|
||||
}
|
||||
|
||||
/// `InvalidHostname` is thrown when attempting to connect to an invalid host.
|
||||
public struct InvalidHostname: NIOTSError {
|
||||
public init() { }
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -778,5 +778,12 @@ class NIOTSConnectionChannelTests: XCTestCase {
|
|||
// throw
|
||||
XCTAssertNoThrow(try eventPromise.futureResult.wait())
|
||||
}
|
||||
|
||||
func testConnectingToEmptyStringErrors() throws {
|
||||
let connectBootstrap = NIOTSConnectionBootstrap(group: self.group)
|
||||
XCTAssertThrowsError(try connectBootstrap.connect(host: "", port: 80).wait()) { error in
|
||||
XCTAssertTrue(error is NIOTSErrors.InvalidHostname)
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
|
|
|||
Loading…
Reference in New Issue