changeset 2209:412322678d59

Fix segfault when receiving a <private> Carbons message tag
author Mikael Berthe <mikael@lilotux.net>
date Fri, 23 Oct 2015 19:55:08 +0200
parents 7c843b29571b
children ea90906cb691
files mcabber/mcabber/xmpp.c mcabber/mcabber/xmpp_helper.c
diffstat 2 files changed, 11 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- a/mcabber/mcabber/xmpp.c	Sun Oct 18 21:02:36 2015 +0200
+++ b/mcabber/mcabber/xmpp.c	Fri Oct 23 19:55:08 2015 +0200
@@ -1112,13 +1112,20 @@
   // Check for carbons!
   x = lm_message_node_find_xmlns(m->node, NS_CARBONS_2);
   gboolean carbons = FALSE;
-  if (x) {
+  if (x && (!g_strcmp0(x->name, "received") || !g_strcmp0(x->name, "sent"))) {
     LmMessageNode *xenc;
     const char *carbon_name = x->name;
     carbons = TRUE;
     // Go 1 level deeper to the forwarded message
     x = lm_message_node_find_xmlns(x, NS_FORWARD);
-    x = lm_message_node_get_child(x, "message");
+    if (x)
+      x = lm_message_node_get_child(x, "message");
+
+    if (!x) {
+      scr_LogPrint(LPRINT_LOGNORM,
+                   "Could not read carbon message!  Please fill a bug.");
+      goto handle_messages_return;
+    }
 
     xenc = lm_message_node_find_xmlns(x, NS_ENCRYPTED);
     if (xenc && (p = lm_message_node_get_value(xenc)) != NULL)
--- a/mcabber/mcabber/xmpp_helper.c	Sun Oct 18 21:02:36 2015 +0200
+++ b/mcabber/mcabber/xmpp_helper.c	Fri Oct 23 19:55:08 2015 +0200
@@ -265,6 +265,8 @@
   LmMessageNode *x;
   const char *p;
 
+  if (!node) return NULL;
+
   for (x = node->children ; x; x = x->next) {
     if ((p = lm_message_node_get_attribute(x, "xmlns")) && !strcmp(p, xmlns))
       break;