QSslSocket: Don't call 'transmit' in unencrypted mode

At the same time I'll add a generic protection against being called in
unprotected mode in the schannel backend (openssl already has it in a
different form).

Change-Id: I97c1be6239c27e306de0af7ad568fbcfde09da71
Reviewed-by: Timur Pocheptsov <timur.pocheptsov@qt.io>
(cherry picked from commit f8badeda72813ee4d32e7672c4a98373cb7b5d60)
Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
This commit is contained in:
Mårten Nordheim 2020-12-04 12:01:03 +01:00 committed by Qt Cherry-pick Bot
parent fc794d7622
commit e9eb05b5b7
2 changed files with 4 additions and 1 deletions

View File

@ -2326,7 +2326,7 @@ void QSslSocketPrivate::_q_errorSlot(QAbstractSocket::SocketError error)
qCDebug(lcSsl) << "\terrorString =" << q->errorString();
#endif
// this moves encrypted bytes from plain socket into our buffer
if (plainSocket->bytesAvailable()) {
if (plainSocket->bytesAvailable() && mode != QSslSocket::UnencryptedMode) {
qint64 tmpReadBufferMaxSize = readBufferMaxSize;
readBufferMaxSize = 0; // reset temporarily so the plain sockets completely drained drained
transmit();

View File

@ -1325,6 +1325,9 @@ void QSslSocketBackendPrivate::transmit()
{
Q_Q(QSslSocket);
if (mode == QSslSocket::UnencryptedMode)
return; // This function should not have been called
// Can happen if called through QSslSocket::abort->QSslSocket::close->QSslSocket::flush->here
if (plainSocket->state() == QAbstractSocket::SocketState::UnconnectedState)
return;