diff --git a/src/mqtt/qmqttcontrolpacket.cpp b/src/mqtt/qmqttcontrolpacket.cpp index 7b1a637..0c4a968 100644 --- a/src/mqtt/qmqttcontrolpacket.cpp +++ b/src/mqtt/qmqttcontrolpacket.cpp @@ -56,7 +56,10 @@ void QMqttControlPacket::clear() void QMqttControlPacket::setHeader(quint8 h) { - m_header = h; + if (h < QMqttControlPacket::CONNECT || h > DISCONNECT || h & 0x0F) + m_header = QMqttControlPacket::UNKNOWN; + else + m_header = h; } void QMqttControlPacket::append(char value) diff --git a/src/mqtt/qmqttcontrolpacket_p.h b/src/mqtt/qmqttcontrolpacket_p.h index fae6710..ecee854 100644 --- a/src/mqtt/qmqttcontrolpacket_p.h +++ b/src/mqtt/qmqttcontrolpacket_p.h @@ -50,6 +50,7 @@ class Q_AUTOTEST_EXPORT QMqttControlPacket { public: enum PacketType { + UNKNOWN = 0x00, CONNECT = 0x10, CONNACK = 0x20, PUBLISH = 0x30, @@ -63,7 +64,7 @@ public: UNSUBACK = 0xB0, PINGREQ = 0xC0, PINGRESP = 0xD0, - DISCONNECT = 0xE0 + DISCONNECT = 0xE0, }; QMqttControlPacket(); @@ -82,7 +83,7 @@ public: QByteArray serialize() const; inline QByteArray payload() const { return m_payload; } private: - quint8 m_header; + quint8 m_header{UNKNOWN}; QByteArray m_payload; }; diff --git a/tests/auto/qmqttcontrolpacket/qmqttcontrolpacket/tst_qmqttcontrolpacket.cpp b/tests/auto/qmqttcontrolpacket/qmqttcontrolpacket/tst_qmqttcontrolpacket.cpp index 20c940c..1c128b9 100644 --- a/tests/auto/qmqttcontrolpacket/qmqttcontrolpacket/tst_qmqttcontrolpacket.cpp +++ b/tests/auto/qmqttcontrolpacket/qmqttcontrolpacket/tst_qmqttcontrolpacket.cpp @@ -44,6 +44,9 @@ void Tst_QMqttControlPacket::header() packet.clear(); QVERIFY(packet.header() == QMqttControlPacket::UNKNOWN); + + packet.setHeader(42); + QVERIFY(packet.header() == QMqttControlPacket::UNKNOWN); } }