summaryrefslogtreecommitdiffstats
path: root/src/network/ssl/qsslsocket_openssl.cpp
diff options
context:
space:
mode:
authorQt Forward Merge Bot <qt_forward_merge_bot@qt-project.org>2018-09-30 01:00:19 +0200
committerQt Forward Merge Bot <qt_forward_merge_bot@qt-project.org>2018-09-30 01:00:19 +0200
commit07e92611050f78dae93bcd362112efd8efa7b41e (patch)
tree6951f77a6344436150c4f83f407e09d946f2c6c3 /src/network/ssl/qsslsocket_openssl.cpp
parent69e68218e5082166d5c4ab1903fbacde00418a1c (diff)
parentcaa598c843eb27fd0c645e62723fd2d4e3e12f60 (diff)
Merge remote-tracking branch 'origin/5.11' into 5.12
Diffstat (limited to 'src/network/ssl/qsslsocket_openssl.cpp')
-rw-r--r--src/network/ssl/qsslsocket_openssl.cpp7
1 files changed, 6 insertions, 1 deletions
diff --git a/src/network/ssl/qsslsocket_openssl.cpp b/src/network/ssl/qsslsocket_openssl.cpp
index ba02d13863..64501a75e8 100644
--- a/src/network/ssl/qsslsocket_openssl.cpp
+++ b/src/network/ssl/qsslsocket_openssl.cpp
@@ -712,7 +712,8 @@ void QSslSocketBackendPrivate::transmit()
// Check if we've got any data to be written to the socket.
QVarLengthArray<char, 4096> data;
int pendingBytes;
- while (plainSocket->isValid() && (pendingBytes = q_BIO_pending(writeBio)) > 0) {
+ while (plainSocket->isValid() && (pendingBytes = q_BIO_pending(writeBio)) > 0
+ && plainSocket->openMode() != QIODevice::NotOpen) {
// Read encrypted data from the write BIO into a buffer.
data.resize(pendingBytes);
int encryptedBytesRead = q_BIO_read(writeBio, data.data(), pendingBytes);
@@ -799,6 +800,10 @@ void QSslSocketBackendPrivate::transmit()
int readBytes = 0;
const int bytesToRead = 4096;
do {
+ if (readChannelCount == 0) {
+ // The read buffer is deallocated, don't try resize or write to it.
+ break;
+ }
// Don't use SSL_pending(). It's very unreliable.
readBytes = q_SSL_read(ssl, buffer.reserve(bytesToRead), bytesToRead);
if (readBytes > 0) {