Mercurial > hg
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;