Schannel: check that plainsocket is open before use
In reality I think it should be covered elsewhere, before reaching
the TLS code. But this is a simple fix to avoid an unnecessary warning.
This is actually quite similar to the resolution in
ef4ba0285f.
Technically checking isWritable would be more correct, but Qt is usually
the one to open the socket, and we open for both read and write anyway.
Fixes: QTBUG-116550
Pick-to: 6.7 6.6 6.5
Change-Id: I4996b18b5b65c434d91543451186f335e201604f
Reviewed-by: Mate Barany <mate.barany@qt.io>
Reviewed-by: Edward Welbourne <edward.welbourne@qt.io>
bb10
parent
3044a8ae27
commit
74f16c0ed5
|
|
@ -1023,8 +1023,10 @@ bool TlsCryptographSchannel::sendToken(void *token, unsigned long tokenLength, b
|
|||
Q_ASSERT(d);
|
||||
auto *plainSocket = d->plainTcpSocket();
|
||||
Q_ASSERT(plainSocket);
|
||||
if (plainSocket->state() == QAbstractSocket::UnconnectedState || !plainSocket->isValid())
|
||||
if (plainSocket->state() == QAbstractSocket::UnconnectedState || !plainSocket->isValid()
|
||||
|| !plainSocket->isOpen()) {
|
||||
return false;
|
||||
}
|
||||
|
||||
const qint64 written = plainSocket->write(static_cast<const char *>(token), tokenLength);
|
||||
if (written != qint64(tokenLength)) {
|
||||
|
|
@ -1387,7 +1389,8 @@ bool TlsCryptographSchannel::performHandshake()
|
|||
auto *plainSocket = d->plainTcpSocket();
|
||||
Q_ASSERT(plainSocket);
|
||||
|
||||
if (plainSocket->state() == QAbstractSocket::UnconnectedState || !plainSocket->isValid()) {
|
||||
if (plainSocket->state() == QAbstractSocket::UnconnectedState || !plainSocket->isValid()
|
||||
|| !plainSocket->isOpen()) {
|
||||
setErrorAndEmit(d, QAbstractSocket::RemoteHostClosedError,
|
||||
QSslSocket::tr("The TLS/SSL connection has been closed"));
|
||||
return false;
|
||||
|
|
@ -1763,8 +1766,10 @@ void TlsCryptographSchannel::transmit()
|
|||
return; // This function should not have been called
|
||||
|
||||
// Can happen if called through QSslSocket::abort->QSslSocket::close->QSslSocket::flush->here
|
||||
if (plainSocket->state() == QAbstractSocket::UnconnectedState || !plainSocket->isValid())
|
||||
if (plainSocket->state() == QAbstractSocket::UnconnectedState || !plainSocket->isValid()
|
||||
|| !plainSocket->isOpen()) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (schannelState != SchannelState::Done) {
|
||||
continueHandshake();
|
||||
|
|
|
|||
Loading…
Reference in New Issue