about summary refs log tree commit diff stats
path: root/src/xmpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/xmpp')
-rw-r--r--src/xmpp/message.c10
-rw-r--r--src/xmpp/stanza.h2
2 files changed, 10 insertions, 2 deletions
diff --git a/src/xmpp/message.c b/src/xmpp/message.c
index ab4d48c6..70371576 100644
--- a/src/xmpp/message.c
+++ b/src/xmpp/message.c
@@ -231,7 +231,13 @@ _message_handler(xmpp_conn_t* const conn, xmpp_stanza_t* const stanza, void* con
         gboolean is_carbon = FALSE;
 
         // XEP-0280: Message Carbons
-        xmpp_stanza_t* carbons = xmpp_stanza_get_child_by_ns(stanza, STANZA_NS_CARBONS);
+        // Only allow `<sent xmlns='urn:xmpp:carbons:2'>` and `<received xmlns='urn:xmpp:carbons:2'>` carbons
+        // Thus ignoring `<private xmlns="urn:xmpp:carbons:2"/>`
+        xmpp_stanza_t* carbons = xmpp_stanza_get_child_by_name_and_ns(stanza, STANZA_NAME_SENT, STANZA_NS_CARBONS);
+        if (!carbons) {
+            carbons = xmpp_stanza_get_child_by_name_and_ns(stanza, STANZA_NAME_RECEIVED, STANZA_NS_CARBONS);
+        }
+
         if (carbons) {
 
             // carbon must come from ourselves
@@ -1291,7 +1297,7 @@ _handle_carbons(xmpp_stanza_t* const stanza)
     }
     */
 
-    if ((g_strcmp0(name, "received") != 0) && (g_strcmp0(name, "sent") != 0)) {
+    if ((g_strcmp0(name, STANZA_NAME_RECEIVED) != 0) && (g_strcmp0(name, STANZA_NAME_SENT) != 0)) {
         log_warning("Carbon received with unrecognised stanza name: %s", name);
         return NULL;
     }
diff --git a/src/xmpp/stanza.h b/src/xmpp/stanza.h
index b4c65641..9e957749 100644
--- a/src/xmpp/stanza.h
+++ b/src/xmpp/stanza.h
@@ -119,6 +119,8 @@
 #define STANZA_NAME_REPORT           "report"
 #define STANZA_NAME_EVENT            "event"
 #define STANZA_NAME_MOOD             "mood"
+#define STANZA_NAME_RECEIVED         "received"
+#define STANZA_NAME_SENT             "sent"
 
 // error conditions
 #define STANZA_NAME_BAD_REQUEST             "bad-request"