res_xmpp: Fix a segfault caused by bodyless messages
authorJonathan Rose <jrose@digium.com>
Wed, 12 Sep 2012 18:33:47 +0000 (18:33 +0000)
committerJonathan Rose <jrose@digium.com>
Wed, 12 Sep 2012 18:33:47 +0000 (18:33 +0000)
(closes issue ASTERISK-20361)
Reported by: Noah Engelberth
Review: https://reviewboard.asterisk.org/r/2108/
........

Merged revisions 372984 from http://svn.asterisk.org/svn/asterisk/branches/11

git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@372985 65c4cc65-6c06-0410-ace0-fbb531ad65f3

res/res_xmpp.c

index 575f142..ce5c9ea 100644 (file)
@@ -2983,19 +2983,23 @@ static int xmpp_component_authenticating(struct ast_xmpp_client *client, struct
 static int xmpp_pak_message(struct ast_xmpp_client *client, struct ast_xmpp_client_config *cfg, iks *node, ikspak *pak)
 {
        struct ast_xmpp_message *message;
+       char *body;
        int deleted = 0;
 
        ast_debug(3, "XMPP client '%s' received a message\n", client->name);
 
+       if (!(body = iks_find_cdata(pak->x, "body"))) {
+               /* Message contains no body, ignore it. */
+               return 0;
+       }
+
        if (!(message = ast_calloc(1, sizeof(*message)))) {
                return -1;
        }
 
        message->arrived = ast_tvnow();
 
-       if (iks_find_cdata(pak->x, "body")) {
-               message->message = ast_strdup(iks_find_cdata(pak->x, "body"));
-       }
+       message->message = ast_strdup(body);
 
        ast_copy_string(message->id, S_OR(pak->id, ""), sizeof(message->id));
        message->from = !ast_strlen_zero(pak->from->full) ? ast_strdup(pak->from->full) : NULL;