diff options
| author | Melvin Keskin <melvo@olomono.de> | 2023-03-10 17:38:38 +0100 |
|---|---|---|
| committer | Linus Jahn <lnj@kaidan.im> | 2023-03-11 00:10:55 +0100 |
| commit | 501686a49d9797b25c998060d97e1fb3f82079f0 (patch) | |
| tree | 05f8e57d82cad0b9de0dc82708bc69a60775bdad | |
| parent | a6c835ba04f8eaa6aab64e6378c6d402a8340218 (diff) | |
OmemoManagerPrivate: Fix SCE affix element processing as specified
| -rw-r--r-- | src/omemo/QXmppOmemoManager_p.cpp | 62 |
1 files changed, 26 insertions, 36 deletions
diff --git a/src/omemo/QXmppOmemoManager_p.cpp b/src/omemo/QXmppOmemoManager_p.cpp index d8830d0d..303c19dc 100644 --- a/src/omemo/QXmppOmemoManager_p.cpp +++ b/src/omemo/QXmppOmemoManager_p.cpp @@ -1553,48 +1553,38 @@ QXmppTask<std::optional<DecryptionResult>> ManagerPrivate::decryptStanza(T stanz QXmppSceEnvelopeReader sceEnvelopeReader(document.documentElement()); if (sceEnvelopeReader.from() != senderJid) { - warning("Sender '" % senderJid % "' of stanza does not match SCE 'from' affix element '" % sceEnvelopeReader.from() % "'"); - interface.finish(std::nullopt); - } else { - const auto recipientJid = QXmppUtils::jidToBareJid(stanza.to()); - auto isSceAffixElementValid = true; + q->info("Sender '" % senderJid % "' of stanza does not match SCE 'from' affix element '" % sceEnvelopeReader.from() % "'"); + } - if (isMessageStanza) { - if (const auto &message = dynamic_cast<const QXmppMessage &>(stanza); message.type() == QXmppMessage::GroupChat && (sceEnvelopeReader.to() != recipientJid)) { - warning("Recipient of group chat message does not match SCE affix element '<to/>'"); - isSceAffixElementValid = false; - } - } else { - if (sceEnvelopeReader.to() != recipientJid) { - warning("Recipient of IQ does not match SCE affix element '<to/>'"); - isSceAffixElementValid = false; - } + if (const auto recipientJid = QXmppUtils::jidToBareJid(stanza.to()); isMessageStanza) { + if (const auto &message = dynamic_cast<const QXmppMessage &>(stanza); message.type() == QXmppMessage::GroupChat && (sceEnvelopeReader.to() != recipientJid)) { + warning("Recipient of group chat message does not match SCE affix element '<to/>'"); + interface.finish(std::nullopt); + return; } + } else if (sceEnvelopeReader.to() != recipientJid) { + q->info("Recipient of IQ does not match SCE affix element '<to/>'"); + } - if (!isSceAffixElementValid) { - interface.finish(std::nullopt); - } else { - auto &device = devices[senderJid][senderDeviceId]; - device.unrespondedSentStanzasCount = 0; + auto &device = devices[senderJid][senderDeviceId]; + device.unrespondedSentStanzasCount = 0; - // Send a heartbeat message to the sender if too many stanzas were - // received responding to none. - if (device.unrespondedReceivedStanzasCount == UNRESPONDED_STANZAS_UNTIL_HEARTBEAT_MESSAGE_IS_SENT) { - sendEmptyMessage(senderJid, senderDeviceId); - device.unrespondedReceivedStanzasCount = 0; - } else { - ++device.unrespondedReceivedStanzasCount; - } + // Send a heartbeat message to the sender if too many stanzas were + // received responding to none. + if (device.unrespondedReceivedStanzasCount == UNRESPONDED_STANZAS_UNTIL_HEARTBEAT_MESSAGE_IS_SENT) { + sendEmptyMessage(senderJid, senderDeviceId); + device.unrespondedReceivedStanzasCount = 0; + } else { + ++device.unrespondedReceivedStanzasCount; + } - QXmppE2eeMetadata e2eeMetadata; - e2eeMetadata.setSceTimestamp(sceEnvelopeReader.timestamp()); - e2eeMetadata.setEncryption(QXmpp::Omemo2); - const auto &senderDevice = devices.value(senderJid).value(senderDeviceId); - e2eeMetadata.setSenderKey(senderDevice.keyId); + QXmppE2eeMetadata e2eeMetadata; + e2eeMetadata.setSceTimestamp(sceEnvelopeReader.timestamp()); + e2eeMetadata.setEncryption(QXmpp::Omemo2); + const auto &senderDevice = devices.value(senderJid).value(senderDeviceId); + e2eeMetadata.setSenderKey(senderDevice.keyId); - interface.finish(DecryptionResult { sceEnvelopeReader.contentElement(), e2eeMetadata }); - } - } + interface.finish(DecryptionResult { sceEnvelopeReader.contentElement(), e2eeMetadata }); } }); |
