changeset 2210:ea90906cb691

Add a few more checks
author Mikael Berthe <mikael@lilotux.net>
date Fri, 23 Oct 2015 20:47:26 +0200
parents 412322678d59
children 902f271743b0
files mcabber/mcabber/xmpp.c mcabber/mcabber/xmpp_helper.c mcabber/mcabber/xmpp_iq.c mcabber/mcabber/xmpp_s10n.c
diffstat 4 files changed, 37 insertions(+), 15 deletions(-) [+]
line wrap: on
line diff
--- 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);
--- 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
--- 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);
--- 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);