aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorLinus Jahn <lnj@kaidan.im>2022-03-16 19:29:04 +0100
committerLinus Jahn <lnj@kaidan.im>2022-03-16 19:30:25 +0100
commit395d2af80de7817dd2b092c2c7d9dfa3fa3f2744 (patch)
tree9ab114a1fdee21c4db4c46d4a11f6af92dfeb3af /src
parent2264fb92e00e60031fa9d472ef7df305a7761aa6 (diff)
downloadqxmpp-395d2af80de7817dd2b092c2c7d9dfa3fa3f2744.tar.gz
StartTlsPacket: Fix UB when parsing invalid type
Diffstat (limited to 'src')
-rw-r--r--src/base/QXmppStartTlsPacket.cpp14
-rw-r--r--src/base/QXmppStartTlsPacket.h3
2 files changed, 12 insertions, 5 deletions
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);