aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKai Koehne <kai.koehne@theqtcompany.com>2016-04-07 14:40:07 +0200
committerKai Koehne <kai.koehne@theqtcompany.com>2016-04-07 13:04:13 +0000
commitba9306ec5a1271275d79b2f48ceb227f79352f33 (patch)
treea18b37883ed1dc568029732e48fd56e3989a6bc8
parenta126127f2c2bc1c8f4c7e44ea543057397bbdafa (diff)
Fix possible hang on handshake
processHandShake operates on complete lines. If the data available does not contain the full handshake message, the loop will therefore never return. Task-number: QTBUG-51001 Change-Id: Ie87f5b5dee01116f463e84f06feab502ff5ac563 Reviewed-by: Joerg Bornemann <joerg.bornemann@theqtcompany.com>
-rw-r--r--src/websockets/qwebsocket_p.cpp7
1 files changed, 5 insertions, 2 deletions
diff --git a/src/websockets/qwebsocket_p.cpp b/src/websockets/qwebsocket_p.cpp
index 0eadc93..2fd52fe 100644
--- a/src/websockets/qwebsocket_p.cpp
+++ b/src/websockets/qwebsocket_p.cpp
@@ -1142,10 +1142,13 @@ void QWebSocketPrivate::processData()
{
Q_ASSERT(m_pSocket);
while (m_pSocket->bytesAvailable()) {
- if (state() == QAbstractSocket::ConnectingState)
+ if (state() == QAbstractSocket::ConnectingState) {
+ if (!m_pSocket->canReadLine())
+ break;
processHandshake(m_pSocket);
- else
+ } else {
m_dataProcessor.process(m_pSocket);
+ }
}
}