diff options
-rw-r--r-- | src/mqtt/qmqttconnection.cpp | 22 |
1 files 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); |