From: Philippe Sultan Date: Sun, 7 Oct 2007 15:54:48 +0000 (+0000) Subject: Merged revisions 84890 via svnmerge from X-Git-Tag: 1.6.0-beta1~3^2~1257 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=4e75bec0277039e9413c9aead4355f911ad48273;p=thirdparty%2Fasterisk.git Merged revisions 84890 via svnmerge from https://origsvn.digium.com/svn/asterisk/branches/1.4 ........ r84890 | phsultan | 2007-10-07 17:52:44 +0200 (Sun, 07 Oct 2007) | 5 lines Prevent Asterisk from crashing when receiving a presence packet without resource from a buddy that is known to have a resource list. Revert a change I previously made, where Asterisk could point to a freed memory location. ........ git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@84891 65c4cc65-6c06-0410-ace0-fbb531ad65f3 --- diff --git a/res/res_jabber.c b/res/res_jabber.c index 5743898c6f..83114a5e59 100644 --- a/res/res_jabber.c +++ b/res/res_jabber.c @@ -1284,7 +1284,7 @@ static void aji_handle_presence(struct aji_client *client, ikspak *pak) tmp = buddy->resources; descrip = ast_strdup(iks_find_cdata(pak->x,"status")); - while (tmp) { + while (tmp && pak->from->resource) { if (!strcasecmp(tmp->resource, pak->from->resource)) { tmp->status = status; if (tmp->description) ast_free(tmp->description); @@ -1357,7 +1357,7 @@ static void aji_handle_presence(struct aji_client *client, ikspak *pak) } /* resource not found in our list, create it */ - if (!found && status != 6) { + if (!found && status != 6 && pak->from->resource) { found = ast_calloc(1, sizeof(*found)); if (!found) { @@ -1391,12 +1391,6 @@ static void aji_handle_presence(struct aji_client *client, ikspak *pak) buddy->resources = found; } - /* if 'from' attribute does not contain 'resource' string - point to the top of our resource list */ - if (!found && !pak->from->resource && buddy->resources) { - found = buddy->resources; - } - ASTOBJ_UNLOCK(buddy); ASTOBJ_UNREF(buddy, aji_buddy_destroy); @@ -1409,7 +1403,8 @@ static void aji_handle_presence(struct aji_client *client, ikspak *pak) ver = iks_find_attrib(iks_find(pak->x, "caps:c"), "ver"); } - if(status !=6 && !found->cap) { + /* retrieve capabilites of the new resource */ + if(status !=6 && found && !found->cap) { found->cap = aji_find_version(node, ver, pak); if(gtalk_yuck(pak->x)) /* gtalk should do discover */ found->cap->jingle = 1;