]> git.ipfire.org Git - thirdparty/asterisk.git/commitdiff
Merged revisions 374336 via svnmerge from
authorAutomerge script <automerge@asterisk.org>
Thu, 4 Oct 2012 02:25:29 +0000 (02:25 +0000)
committerAutomerge script <automerge@asterisk.org>
Thu, 4 Oct 2012 02:25:29 +0000 (02:25 +0000)
file:///srv/subversion/repos/asterisk/branches/10

................
  r374336 | mjordan | 2012-10-03 21:11:05 -0500 (Wed, 03 Oct 2012) | 31 lines

  Check for presence of buddy in info/dinfo handlers

  The res_jabber resource module uses the ASTOBJ library for managing its ref
  counted objects.  After calling ASTOBJ_CONTAINER_FIND to locate a buddy object,
  the pointer to the object has to be checked to see if the buddy existed.
  Prior to this patch, the buddy object was not checked for NULL; with this patch
  in both aji_client_info_handler and aji_dinfo_handler the pointer is checked
  before used and, if no buddy object was found, the handlers return an error
  code.

  This patch does not take the approach that our JID can be used to log in from
  another resource.  If that approach is desired, an improvement could be made to
  this patch to create the buddy on the fly.  This patch seeks only to prevent
  Asterisk from crashing.

  Note that multiple people have proposed patches for this issue; the patch being
  committed here is based on those.

  (closes issue ASTERISK-19532)
  Reported by: Karsten Wemheuer
  Tested by: Byron Clark
  patches:
    fix-jabber uploaded by Karsten Wemheuer (license #5930)
    xmpp_no_crash_with_ejabberd.patch uploaded by Byron Clark (license #6157)

  (closes issue ASTERISK-19557)
  Reported by: ulugutz
  ........

  Merged revisions 374335 from http://svn.asterisk.org/svn/asterisk/branches/1.8
................

git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/10-digiumphones@374364 65c4cc65-6c06-0410-ace0-fbb531ad65f3

res/res_jabber.c

index 388b40fb1e2919a80a58f778f51a05835aa5db83..92ff98cf45ab44cab57faa5a6ec99e3e681f1279 100644 (file)
@@ -2045,6 +2045,12 @@ static int aji_client_info_handler(void *data, ikspak *pak)
        struct aji_resource *resource = NULL;
        struct aji_buddy *buddy = ASTOBJ_CONTAINER_FIND(&client->buddies, pak->from->partial);
 
+       if (!buddy) {
+               ast_log(LOG_NOTICE, "JABBER: Received client info from unknown buddy: %s.\n", pak->from->full);
+               ASTOBJ_UNREF(client, ast_aji_client_destroy);
+               return IKS_FILTER_EAT;
+       }
+
        resource = aji_find_resource(buddy, pak->from->resource);
        if (pak->subtype == IKS_TYPE_RESULT) {
                if (!resource) {
@@ -2112,6 +2118,12 @@ static int aji_dinfo_handler(void *data, ikspak *pak)
        struct aji_resource *resource = NULL;
        struct aji_buddy *buddy = ASTOBJ_CONTAINER_FIND(&client->buddies, pak->from->partial);
 
+       if (!buddy) {
+               ast_log(LOG_NOTICE, "JABBER: Received client info from unknown buddy: %s.\n", pak->from->full);
+               ASTOBJ_UNREF(client, ast_aji_client_destroy);
+               return IKS_FILTER_EAT;
+       }
+
        if (pak->subtype == IKS_TYPE_ERROR) {
                ast_log(LOG_WARNING, "Received error from a client, turn on jabber debug!\n");
                ASTOBJ_UNREF(client, ast_aji_client_destroy);