Mercurial > ~mikael > mcabber > hg
diff mcabber/mcabber/xmpp_iq.c @ 2210:ea90906cb691
Add a few more checks
author | Mikael Berthe <mikael@lilotux.net> |
---|---|
date | Fri, 23 Oct 2015 20:47:26 +0200 |
parents | ec0a361f3ff1 |
children | f5402d705f67 |
line wrap: on
line diff
--- 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);