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);