aboutsummaryrefslogtreecommitdiff
path: root/src/client
diff options
context:
space:
mode:
authorLinus Jahn <lnj@kaidan.im>2022-04-04 18:09:03 +0200
committerLinus Jahn <lnj@kaidan.im>2022-05-20 16:55:28 +0200
commit6c111246ec0a17309e4d6af4c57d6fcc058671cb (patch)
treed571b73393377831719d3119e47b274cb24cbb5a /src/client
parent7b0d7e727052119d40854b621f7da775ac2fea4c (diff)
downloadqxmpp-6c111246ec0a17309e4d6af4c57d6fcc058671cb.tar.gz
Client: Don't pass encrypted stanzas to old managers
Old managers means managers only using the old handleStanza() overload. Such managers are likely not handling the encrypted contents correctly (e.g. sending unencrypted replies and thereby leaking information).
Diffstat (limited to 'src/client')
-rw-r--r--src/client/QXmppClient.cpp7
-rw-r--r--src/client/QXmppClientExtension.cpp3
2 files changed, 9 insertions, 1 deletions
diff --git a/src/client/QXmppClient.cpp b/src/client/QXmppClient.cpp
index b1c60233..b371e052 100644
--- a/src/client/QXmppClient.cpp
+++ b/src/client/QXmppClient.cpp
@@ -111,8 +111,13 @@ namespace QXmpp::Private::StanzaPipeline {
bool process(const QList<QXmppClientExtension *> &extensions, const QDomElement &element, const std::optional<QXmppE2eeMetadata> &e2eeMetadata)
{
+ const bool unencrypted = !e2eeMetadata.has_value();
for (auto *extension : extensions) {
- if (extension->handleStanza(element, e2eeMetadata) || extension->handleStanza(element)) {
+ // e2e encrypted stanzas are not passed to the old handleStanza() overload, because such
+ // managers are likely not handling the encrypted contents correctly (e.g. sending
+ // unencrypted replies and thereby leaking information).
+ if (extension->handleStanza(element, e2eeMetadata) ||
+ (unencrypted && extension->handleStanza(element))) {
return true;
}
}
diff --git a/src/client/QXmppClientExtension.cpp b/src/client/QXmppClientExtension.cpp
index c5e00c21..eb6ec907 100644
--- a/src/client/QXmppClientExtension.cpp
+++ b/src/client/QXmppClientExtension.cpp
@@ -53,6 +53,9 @@ QList<QXmppDiscoveryIq::Identity> QXmppClientExtension::discoveryIdentities() co
/// processing should occur, or false to let other extensions process
/// the stanza.
///
+/// End-to-end encrypted stanzas are not passed to this overload, for that
+/// purpose use the new overload instead.
+///
/// \deprecated This is deprecated since QXmpp 1.5. Please use
/// QXmppClientExtension::handleStanza(const QDomElement &stanza,
/// const std::optional<QXmppE2eeMetadata> &e2eeMetadata).