From aa758fc9b331dc73b434b633955e4f655a948797 Mon Sep 17 00:00:00 2001 From: Linus Jahn Date: Wed, 1 Jul 2020 21:09:34 +0200 Subject: QXmppMessageReceiptManager: Ignore all error messages Not only receipt requests, but also receipts from error messages should not be used. --- src/client/QXmppMessageReceiptManager.cpp | 5 ++++- .../tst_qxmppmessagereceiptmanager.cpp | 21 ++++++++++++++++++++- 2 files changed, 24 insertions(+), 2 deletions(-) diff --git a/src/client/QXmppMessageReceiptManager.cpp b/src/client/QXmppMessageReceiptManager.cpp index 27d96d11..ea4bef96 100644 --- a/src/client/QXmppMessageReceiptManager.cpp +++ b/src/client/QXmppMessageReceiptManager.cpp @@ -53,6 +53,9 @@ bool QXmppMessageReceiptManager::handleStanza(const QDomElement &stanza) QXmppMessage message; message.parse(stanza); + if (message.type() == QXmppMessage::Error) + return false; + // Handle receipts and cancel any further processing. if (!message.receiptId().isEmpty()) { // Buggy clients also mark carbon messages as received; to avoid this @@ -64,7 +67,7 @@ bool QXmppMessageReceiptManager::handleStanza(const QDomElement &stanza) } // If requested, send a receipt. - if (message.isReceiptRequested() && !message.from().isEmpty() && !message.id().isEmpty() && message.type() != QXmppMessage::Error) { + if (message.isReceiptRequested() && !message.from().isEmpty() && !message.id().isEmpty()) { QXmppMessage receipt; receipt.setTo(message.from()); receipt.setReceiptId(message.id()); diff --git a/tests/qxmppmessagereceiptmanager/tst_qxmppmessagereceiptmanager.cpp b/tests/qxmppmessagereceiptmanager/tst_qxmppmessagereceiptmanager.cpp index 0aff489c..4095f6a8 100644 --- a/tests/qxmppmessagereceiptmanager/tst_qxmppmessagereceiptmanager.cpp +++ b/tests/qxmppmessagereceiptmanager/tst_qxmppmessagereceiptmanager.cpp @@ -99,7 +99,7 @@ void tst_QXmppMessageReceiptManager::testReceipt_data() << false << false << true; - QTest::newRow("error") + QTest::newRow("error-request") << QByteArray( " " + "" + " " + " " + "" + "Your contact offline message queue is full. The message has been discarded." + "" + "" + "1 " + "") + << false + << false + << false; QTest::newRow("message with receipt request") << QByteArray( "