about summary refs log tree commit diff stats
path: root/src
diff options
context:
space:
mode:
authorMichael Vetter <jubalh@iodoru.org>2020-07-03 17:55:15 +0200
committerMichael Vetter <jubalh@iodoru.org>2020-07-03 17:55:15 +0200
commitb1343cd3ac5647b3ca61efde279da59cc94fde73 (patch)
treec376b2768a432101f3c4dff58d046e758ee117da /src
parent896e6c4e8717be1dd477b2c24e555e30414aa04c (diff)
downloadprofani-tty-b1343cd3ac5647b3ca61efde279da59cc94fde73.tar.gz
message.c: _handle_carbons() check from field outside of function
So that we don't have to pass the wrapping stanza and can handle
the error nicer.
Diffstat (limited to 'src')
-rw-r--r--src/xmpp/message.c32
1 files changed, 17 insertions, 15 deletions
diff --git a/src/xmpp/message.c b/src/xmpp/message.c
index 9b0dd3a3..1bb13e83 100644
--- a/src/xmpp/message.c
+++ b/src/xmpp/message.c
@@ -86,7 +86,7 @@ static void _handle_captcha(xmpp_stanza_t *const stanza);
 static void _handle_receipt_received(xmpp_stanza_t *const stanza);
 static void _handle_chat(xmpp_stanza_t *const stanza, gboolean is_mam, gboolean is_carbon);
 static void _handle_ox_chat(xmpp_stanza_t *const stanza, ProfMessage *message, gboolean is_mam);
-static xmpp_stanza_t* _handle_carbons(xmpp_stanza_t *const stanza, xmpp_stanza_t *const wrapping_msg_stanza);
+static xmpp_stanza_t* _handle_carbons(xmpp_stanza_t *const stanza);
 static void _send_message_stanza(xmpp_stanza_t *const stanza);
 static gboolean _handle_mam(xmpp_stanza_t *const stanza);
 static void _handle_pubsub(xmpp_stanza_t *const stanza, xmpp_stanza_t *const event);
@@ -213,9 +213,21 @@ _message_handler(xmpp_conn_t *const conn, xmpp_stanza_t *const stanza, void *con
         // XEP-0280: Message Carbons
         xmpp_stanza_t *carbons = xmpp_stanza_get_child_by_ns(stanza, STANZA_NS_CARBONS);
         if (carbons) {
-            is_carbon = TRUE;
-            // returns NULL if it was a carbon that was invalid, so that we dont parse later
-            msg_stanza = _handle_carbons(carbons, stanza);
+
+            // carbon must come from ourselves
+            char *mybarejid = connection_get_barejid();
+            const char *const stanza_from = xmpp_stanza_get_from(stanza);
+
+            if (g_strcmp0(mybarejid, stanza_from) != 0) {
+                log_warning("Invalid carbon received, from: %s", stanza_from);
+                msg_stanza = NULL;
+            } else {
+                is_carbon = TRUE;
+                // returns NULL if it was a carbon that was invalid, so that we dont parse later
+                msg_stanza = _handle_carbons(carbons);
+            }
+
+            free(mybarejid);
         }
 
         if (msg_stanza) {
@@ -1170,7 +1182,7 @@ out:
 }
 
 static xmpp_stanza_t*
-_handle_carbons(xmpp_stanza_t *const stanza, xmpp_stanza_t *const wrapping_msg_stanza)
+_handle_carbons(xmpp_stanza_t *const stanza)
 {
     const char *name = xmpp_stanza_get_name(stanza);
     if (!name) {
@@ -1201,16 +1213,6 @@ _handle_carbons(xmpp_stanza_t *const stanza, xmpp_stanza_t *const wrapping_msg_s
         return NULL;
     }
 
-    // carbon must come from ourselves
-    char *mybarejid = connection_get_barejid();
-    const char *const stanza_from = xmpp_stanza_get_from(wrapping_msg_stanza);
-    if (g_strcmp0(mybarejid, stanza_from) != 0) {
-        free(mybarejid);
-        log_warning("Invalid carbon received, from: %s", stanza_from);
-        return NULL;
-    }
-
-    free(mybarejid);
     return message_stanza;
 }