aboutsummaryrefslogtreecommitdiff
path: root/src/client/QXmppClient.cpp
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/QXmppClient.cpp
parent7b0d7e727052119d40854b621f7da775ac2fea4c (diff)
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/QXmppClient.cpp')
-rw-r--r--src/client/QXmppClient.cpp7
1 files changed, 6 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;
}
}