Skip to content

Commit

Permalink
Improve XEP-0308 compliance
Browse files Browse the repository at this point in the history
Disallow correcting historical MUC messages, as the XEP-308 requires.

Previous changes introduce problem with
"Illicit LMC attempt from conference@server/user for message from user"

During investigation it was revealed that XEP does not recommend support
of historical MUC messages correction.

```
When used in a Multi-User Chat (XEP-0045) context,
corrections must not be allowed (by the receiver)
for messages received before the sender joined the room -
particularly a full JID leaving the room
then rejoining and correcting a message SHOULD be disallowed,
as the entity behind the full JID in the MUC may have changed.
```
https://xmpp.org/extensions/xep-0308.html#rules

XEP details mentioned by @jubalh
Bug discovered and solution improved by  @jaeckel
  • Loading branch information
H3rnand3zzz committed Nov 6, 2023
1 parent 89dc7a4 commit a671cff
Showing 1 changed file with 8 additions and 8 deletions.
16 changes: 8 additions & 8 deletions src/xmpp/message.c
Original file line number Diff line number Diff line change
Expand Up @@ -1101,14 +1101,6 @@ _handle_groupchat(xmpp_stanza_t* const stanza)
}
}

xmpp_stanza_t* replace_id_stanza = xmpp_stanza_get_child_by_ns(stanza, STANZA_NS_LAST_MESSAGE_CORRECTION);
if (replace_id_stanza) {
const char* replace_id = xmpp_stanza_get_id(replace_id_stanza);
if (replace_id) {
message->replace_id = strdup(replace_id);
}
}

message->body = xmpp_message_get_body(stanza);

// check omemo encryption
Expand Down Expand Up @@ -1153,6 +1145,14 @@ _handle_groupchat(xmpp_stanza_t* const stanza)
if (is_muc_history) {
sv_ev_room_history(message);
} else {
// XEP-0308 states: `corrections must not be allowed (by the receiver) for messages received before the sender joined the room`
xmpp_stanza_t* replace_id_stanza = xmpp_stanza_get_child_by_ns(stanza, STANZA_NS_LAST_MESSAGE_CORRECTION);
if (replace_id_stanza) {
const char* replace_id = xmpp_stanza_get_id(replace_id_stanza);
if (replace_id) {
message->replace_id = strdup(replace_id);
}
}
sv_ev_room_message(message);
}

Expand Down

0 comments on commit a671cff

Please sign in to comment.