summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMÃ¥rten Nordheim <marten.nordheim@qt.io>2020-12-04 12:01:03 +0100
committerQt Cherry-pick Bot <cherrypick_bot@qt-project.org>2020-12-04 18:29:42 +0000
commit10f07d28def111c4b7fdcb9e79e8afbea38ee27a (patch)
treeda92584c876aca7e46f3e00bd3464a339f985b02
parent6d5514ac7d846d7ed17a5ac62c2809f84532d444 (diff)
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>
-rw-r--r--src/network/ssl/qsslsocket.cpp2
-rw-r--r--src/network/ssl/qsslsocket_schannel.cpp3
2 files changed, 4 insertions, 1 deletions
diff --git a/src/network/ssl/qsslsocket.cpp b/src/network/ssl/qsslsocket.cpp
index fbeb9de18b..27ce8e08d5 100644
--- a/src/network/ssl/qsslsocket.cpp
+++ b/src/network/ssl/qsslsocket.cpp
@@ -2709,7 +2709,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();
diff --git a/src/network/ssl/qsslsocket_schannel.cpp b/src/network/ssl/qsslsocket_schannel.cpp
index f91709690a..c956ce3c2b 100644
--- a/src/network/ssl/qsslsocket_schannel.cpp
+++ b/src/network/ssl/qsslsocket_schannel.cpp
@@ -1253,6 +1253,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;