From f78a189da5d9e13a96a52b9d17cdc80df06ed8c8 Mon Sep 17 00:00:00 2001 From: Albert Astals Cid Date: Sat, 27 May 2017 00:54:56 +0200 Subject: [PATCH] QSSLSocket::readData return -1 when socket is not connected As QAbstractSocket::readData does and as the documentation of QIODevice says "this function returns -1 in those cases (that is, reading on a closed socket..." Change-Id: I1e64673f6a6d792a640bd6cb28b2bb5a0f18dc36 Reviewed-by: Aleix Pol Reviewed-by: Edward Welbourne --- src/network/ssl/qsslsocket.cpp | 2 ++ tests/auto/network/ssl/qsslsocket/tst_qsslsocket.cpp | 7 +++++++ 2 files changed, 9 insertions(+) diff --git a/src/network/ssl/qsslsocket.cpp b/src/network/ssl/qsslsocket.cpp index 84b8f3a8d9..0e4b049353 100644 --- a/src/network/ssl/qsslsocket.cpp +++ b/src/network/ssl/qsslsocket.cpp @@ -1993,6 +1993,8 @@ qint64 QSslSocket::readData(char *data, qint64 maxlen) // possibly trigger another transmit() to decrypt more data from the socket if (d->plainSocket->bytesAvailable()) QMetaObject::invokeMethod(this, "_q_flushReadBuffer", Qt::QueuedConnection); + else if (d->state != QAbstractSocket::ConnectedState) + return maxlen ? qint64(-1) : qint64(0); } return readBytes; diff --git a/tests/auto/network/ssl/qsslsocket/tst_qsslsocket.cpp b/tests/auto/network/ssl/qsslsocket/tst_qsslsocket.cpp index f44e5261dd..90838e8831 100644 --- a/tests/auto/network/ssl/qsslsocket/tst_qsslsocket.cpp +++ b/tests/auto/network/ssl/qsslsocket/tst_qsslsocket.cpp @@ -2162,6 +2162,13 @@ void tst_QSslSocket::waitForMinusOne() // fifth verification: it should wait for 200 ms more QVERIFY(socket.waitForDisconnected(-1)); + + // sixth verification: reading from a disconnected socket returns -1 + // once we deplete the read buffer + QCOMPARE(socket.state(), QAbstractSocket::UnconnectedState); + socket.readAll(); + char aux; + QCOMPARE(socket.read(&aux, 1), -1); } class VerifyServer : public QTcpServer