From 5746eeff1716af45f1d063c4100043a1a201ba81 Mon Sep 17 00:00:00 2001 From: Lorenz Haas Date: Sun, 3 Dec 2017 14:08:22 +0100 Subject: Fix test for fixed header completeness The old test yield false if for example 3 bytes where received and the second byte had no continuation bit but the third byte. In such a case the third byte, however, is not part of the fixed header any more. Thus the fixed header must considered complete. Task-number: QTBUG-64965 Change-Id: Ie2853d11edeabc5ab3d06e98c3628af99a4d9ea8 Reviewed-by: Maurice Kalinowski --- src/mqtt/qmqttconnection.cpp | 22 +++++++++++++++++----- 1 file changed, 17 insertions(+), 5 deletions(-) diff --git a/src/mqtt/qmqttconnection.cpp b/src/mqtt/qmqttconnection.cpp index 622edba..09eeacd 100644 --- a/src/mqtt/qmqttconnection.cpp +++ b/src/mqtt/qmqttconnection.cpp @@ -756,12 +756,24 @@ void QMqttConnection::processData() // MQTT-2.2 A fixed header of a control packet must be at least 2 bytes. If the payload is // longer than 127 bytes the header can be up to 5 bytes long. - const int readBufferSize = m_readBuffer.size(); - if (readBufferSize < 2 - || (readBufferSize == 2 && (m_readBuffer.at(1) & 128) != 0) - || (readBufferSize == 3 && (m_readBuffer.at(2) & 128) != 0) - || (readBufferSize == 4 && (m_readBuffer.at(3) & 128) != 0)) { + switch (m_readBuffer.size()) { + case 0: + case 1: return; + case 2: + if ((m_readBuffer.at(1) & 128) != 0) + return; + break; + case 3: + if ((m_readBuffer.at(1) & 128) != 0 && (m_readBuffer.at(2) & 128) != 0) + return; + break; + case 4: + if ((m_readBuffer.at(1) & 128) != 0 && (m_readBuffer.at(2) & 128) != 0 && (m_readBuffer.at(3) & 128) != 0) + return; + break; + default: + break; } readBuffer((char*)&m_currentPacket, 1); -- cgit v1.2.3