From 42b617384318f0a659f16433e444b70e68ff7b25 Mon Sep 17 00:00:00 2001 From: Linus Jahn Date: Wed, 16 Mar 2022 18:54:00 +0100 Subject: MixIq: Fix UB when parsing invalid action type --- src/base/QXmppMixIq.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) (limited to 'src/base') diff --git a/src/base/QXmppMixIq.cpp b/src/base/QXmppMixIq.cpp index e61616a7..0908e733 100644 --- a/src/base/QXmppMixIq.cpp +++ b/src/base/QXmppMixIq.cpp @@ -150,7 +150,9 @@ void QXmppMixIq::parseElementFromChild(const QDomElement& element) { QDomElement child = element.firstChildElement(); // determine action type - d->actionType = (QXmppMixIq::Type)MIX_ACTION_TYPES.indexOf(child.tagName()); + if (auto index = MIX_ACTION_TYPES.indexOf(child.tagName()); index >= 0) { + d->actionType = Type(index); + } if (child.namespaceURI() == ns_mix_pam) { if (child.hasAttribute(QStringLiteral("channel"))) -- cgit v1.2.3 From 2264fb92e00e60031fa9d472ef7df305a7761aa6 Mon Sep 17 00:00:00 2001 From: Linus Jahn Date: Wed, 16 Mar 2022 19:28:25 +0100 Subject: Message: Processing Hints: Fix UB when parsing unknown hint --- src/base/QXmppMessage.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) (limited to 'src/base') diff --git a/src/base/QXmppMessage.cpp b/src/base/QXmppMessage.cpp index 9ec64d7f..45bc60be 100644 --- a/src/base/QXmppMessage.cpp +++ b/src/base/QXmppMessage.cpp @@ -1449,7 +1449,9 @@ void QXmppMessage::parseExtension(const QDomElement &element, QXmppElementList & } else if (element.namespaceURI() == ns_message_processing_hints && HINT_TYPES.contains(element.tagName())) { // XEP-0334: Message Processing Hints - addHint(Hint(1 << HINT_TYPES.indexOf(element.tagName()))); + if (const auto index = HINT_TYPES.indexOf(element.tagName()); index >= 0) { + addHint(Hint(1 << index)); + } } else if (checkElement(element, QStringLiteral("stanza-id"), ns_sid)) { // XEP-0359: Unique and Stable Stanza IDs d->stanzaId = element.attribute(QStringLiteral("id")); -- cgit v1.2.3 From 395d2af80de7817dd2b092c2c7d9dfa3fa3f2744 Mon Sep 17 00:00:00 2001 From: Linus Jahn Date: Wed, 16 Mar 2022 19:29:04 +0100 Subject: StartTlsPacket: Fix UB when parsing invalid type --- src/base/QXmppStartTlsPacket.cpp | 14 ++++++++++---- src/base/QXmppStartTlsPacket.h | 3 ++- 2 files changed, 12 insertions(+), 5 deletions(-) (limited to 'src/base') diff --git a/src/base/QXmppStartTlsPacket.cpp b/src/base/QXmppStartTlsPacket.cpp index f4c5e2fb..445f519e 100644 --- a/src/base/QXmppStartTlsPacket.cpp +++ b/src/base/QXmppStartTlsPacket.cpp @@ -65,14 +65,20 @@ void QXmppStartTlsPacket::parse(const QDomElement &element) if (!QXmppStartTlsPacket::isStartTlsPacket(element)) return; - m_type = Type(STARTTLS_TYPES.indexOf(element.tagName())); + if (auto index = STARTTLS_TYPES.indexOf(element.tagName()); index >= 0) { + m_type = Type(index); + } else { + m_type = Invalid; + } } void QXmppStartTlsPacket::toXml(QXmlStreamWriter *writer) const { - writer->writeStartElement(STARTTLS_TYPES.at(int(m_type))); - writer->writeDefaultNamespace(ns_tls); - writer->writeEndElement(); + if (m_type != Invalid) { + writer->writeStartElement(STARTTLS_TYPES.at(int(m_type))); + writer->writeDefaultNamespace(ns_tls); + writer->writeEndElement(); + } } /// \endcond diff --git a/src/base/QXmppStartTlsPacket.h b/src/base/QXmppStartTlsPacket.h index 9b91bef9..5396f5d9 100644 --- a/src/base/QXmppStartTlsPacket.h +++ b/src/base/QXmppStartTlsPacket.h @@ -39,7 +39,8 @@ public: enum Type { StartTls, ///< Used by the client to initiate STARTTLS. Proceed, ///< Used by the server to accept STARTTLS. - Failure ///< Used by the server to reject STARTTLS. + Failure, ///< Used by the server to reject STARTTLS. + Invalid, ///< Invalid type }; QXmppStartTlsPacket(Type type = StartTls); -- cgit v1.2.3