# HG changeset patch # User Mikael Berthe # Date 1445626046 -7200 # Node ID ea90906cb6919a4af161db426702e62ccdabe453 # Parent 412322678d5957c3d3ba1a9ec8306ccf81336fbc Add a few more checks diff -r 412322678d59 -r ea90906cb691 mcabber/mcabber/xmpp.c --- a/mcabber/mcabber/xmpp.c Fri Oct 23 19:55:08 2015 +0200 +++ b/mcabber/mcabber/xmpp.c Fri Oct 23 20:47:26 2015 +0200 @@ -1292,7 +1292,7 @@ LmMessageNode *info; LmMessageNode *query = lm_message_node_get_child(m->node, "query"); - if (caps_has_hash(ver, bjid)) + if (caps_has_hash(ver, bjid) || !query) goto caps_callback_return; caps_add(ver); diff -r 412322678d59 -r ea90906cb691 mcabber/mcabber/xmpp_helper.c --- a/mcabber/mcabber/xmpp_helper.c Fri Oct 23 19:55:08 2015 +0200 +++ b/mcabber/mcabber/xmpp_helper.c Fri Oct 23 20:47:26 2015 +0200 @@ -108,6 +108,9 @@ const gchar *child) { LmMessageNode *tmp; + + if (G_UNLIKELY(!node || !child)) return NULL; + tmp = lm_message_node_find_child(node, child); if (tmp) { const gchar *val = lm_message_node_get_value(tmp); @@ -142,6 +145,8 @@ LmMessageNode *node; node = g_new0 (LmMessageNode, 1); + if (G_UNLIKELY(!node)) return NULL; + node->name = g_strdup (name); node->value = NULL; node->raw_mode = FALSE; @@ -160,6 +165,7 @@ LmMessageNode *child) { LmMessageNode *x; + if (G_UNLIKELY(!node)) return; lm_message_node_deep_ref(child); if (node->children == NULL) @@ -173,8 +179,7 @@ void lm_message_node_deep_ref(LmMessageNode *node) { - if (node == NULL) - return; + if (G_UNLIKELY(!node)) return; lm_message_node_ref(node); lm_message_node_deep_ref(node->next); lm_message_node_deep_ref(node->children); @@ -265,7 +270,7 @@ LmMessageNode *x; const char *p; - if (!node) return NULL; + if (G_UNLIKELY(!node)) return NULL; for (x = node->children ; x; x = x->next) { if ((p = lm_message_node_get_attribute(x, "xmlns")) && !strcmp(p, xmlns)) @@ -387,7 +392,6 @@ // And sometimes there is a text message s = lm_message_node_get_child_value(x, "text"); - if (s && *s) desc = s; // If we still have no description, let's give up diff -r 412322678d59 -r ea90906cb691 mcabber/mcabber/xmpp_iq.c --- a/mcabber/mcabber/xmpp_iq.c Fri Oct 23 19:55:08 2015 +0200 +++ b/mcabber/mcabber/xmpp_iq.c Fri Oct 23 20:47:26 2015 +0200 @@ -103,6 +103,8 @@ LmMessageNode *err; int i; + if (G_UNLIKELY(!m)) return NULL; + for (i = 0; xmpp_errors[i].code; ++i) if (xmpp_errors[i].code == error) break; @@ -124,8 +126,10 @@ { LmMessage *r; r = lm_message_new_iq_error(m, error); - lm_connection_send(c, r, NULL); - lm_message_unref(r); + if (r) { + lm_connection_send(c, r, NULL); + lm_message_unref(r); + } } static void lm_message_node_add_dataform_result(LmMessageNode *node, @@ -337,6 +341,9 @@ LmMessageNode *command, *x; x = lm_message_node_get_child(m->node, "command"); + if (!x) + return LM_HANDLER_RESULT_REMOVE_MESSAGE; + action = lm_message_node_get_attribute(x, "action"); node = lm_message_node_get_attribute(x, "node"); sessionid = (char*)lm_message_node_get_attribute(x, "sessionid"); @@ -436,6 +443,10 @@ requester_jid = lm_message_get_from(m); cmd = lm_message_node_get_child(m->node, "command"); + if (!cmd) { + //send_iq_error(c, m, XMPP_ERROR_BAD_REQUEST); + return LM_HANDLER_RESULT_REMOVE_MESSAGE; + } if (jid_equal(lm_connection_get_jid(c), requester_jid)) { const char *action, *node; action = lm_message_node_get_attribute(cmd, "action"); @@ -454,12 +465,14 @@ LmMessage *r; LmMessageNode *err; r = lm_message_new_iq_error(m, XMPP_ERROR_BAD_REQUEST); - err = lm_message_node_get_child(r->node, "error"); - lm_message_node_set_attribute - (lm_message_node_add_child(err, "malformed-action", NULL), - "xmlns", NS_COMMANDS); - lm_connection_send(c, r, NULL); - lm_message_unref(r); + if (r) { + err = lm_message_node_get_child(r->node, "error"); + lm_message_node_set_attribute + (lm_message_node_add_child(err, "malformed-action", NULL), + "xmlns", NS_COMMANDS); + lm_connection_send(c, r, NULL); + lm_message_unref(r); + } } } else { send_iq_error(c, m, XMPP_ERROR_FORBIDDEN); @@ -473,9 +486,10 @@ LmMessage *m, gpointer ud) { LmMessageNode *query; - const char *node; + const char *node = NULL; query = lm_message_node_get_child(m->node, "query"); - node = lm_message_node_get_attribute(query, "node"); + if (query) + node = lm_message_node_get_attribute(query, "node"); if (node) { if (!strcmp(node, NS_COMMANDS)) { return handle_iq_commands_list(NULL, c, m, ud); diff -r 412322678d59 -r ea90906cb691 mcabber/mcabber/xmpp_s10n.c --- a/mcabber/mcabber/xmpp_s10n.c Fri Oct 23 19:55:08 2015 +0200 +++ b/mcabber/mcabber/xmpp_s10n.c Fri Oct 23 20:47:26 2015 +0200 @@ -30,6 +30,10 @@ // Send a s10n message with the passed subtype void xmpp_send_s10n(const char *bjid, LmMessageSubType type) { + if (G_UNLIKELY(!bjid || !*bjid)) { + scr_LogPrint(LPRINT_LOGNORM, "Empty JID."); + return; + } LmMessage *x = lm_message_new_with_sub_type(bjid, LM_MESSAGE_TYPE_PRESENCE, type);