From 58ee9cf0fbf128b66b6297b2505a4df1deded916 Mon Sep 17 00:00:00 2001 From: Linus Jahn Date: Fri, 1 Feb 2019 18:10:30 +0100 Subject: MessageReceiptManager: Don't accept receipts from other resources There were some problems with buggy clients leading to that some messages were already marked as received, even though only another resource of the used account has got the message. Here is an example: [outgoing]: test [incoming]: Here the other client "dino.dc02d539" sent an tag, although it actually received this message over carbons. To avoid that we need to ignore messages also from our bare JID. --- src/client/QXmppMessageReceiptManager.cpp | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) (limited to 'src/client/QXmppMessageReceiptManager.cpp') diff --git a/src/client/QXmppMessageReceiptManager.cpp b/src/client/QXmppMessageReceiptManager.cpp index 2abe32a6..c010eadf 100644 --- a/src/client/QXmppMessageReceiptManager.cpp +++ b/src/client/QXmppMessageReceiptManager.cpp @@ -29,6 +29,7 @@ #include "QXmppConstants_p.h" #include "QXmppMessage.h" #include "QXmppClient.h" +#include "QXmppUtils.h" /// Constructs a QXmppMessageReceiptManager to handle incoming and outgoing /// message delivery receipts. @@ -54,7 +55,12 @@ bool QXmppMessageReceiptManager::handleStanza(const QDomElement &stanza) // Handle receipts and cancel any further processing. if (!message.receiptId().isEmpty()) { - emit messageDelivered(message.from(), message.receiptId()); + // Buggy clients also mark carbon messages as received; to avoid this + // we check whether sender and receiver have the same bare JID. + if (QXmppUtils::jidToBareJid(message.from()) + != QXmppUtils::jidToBareJid(message.to())) { + emit messageDelivered(message.from(), message.receiptId()); + } return true; } -- cgit v1.2.3