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