Fix crash in AMI PJSIPShowEndpoint action.
authorMark Michelson <mmichelson@digium.com>
Thu, 13 Feb 2014 15:57:21 +0000 (15:57 +0000)
committerMark Michelson <mmichelson@digium.com>
Thu, 13 Feb 2014 15:57:21 +0000 (15:57 +0000)
If an AOR has no permanent contacts, then the
permanent_contacts container is never allocated.
This makes the code safe in the face of NULLs.

I also changed the variable that counts contacts
from "num" to "total_contacts" since there are now
two variables that are indicate numbers of things.
........

Merged revisions 407988 from http://svn.asterisk.org/svn/asterisk/branches/12

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

res/res_pjsip/location.c

index dd9037f..fbc48fe 100644 (file)
@@ -349,7 +349,8 @@ static int format_ami_aor_handler(void *obj, void *arg, int flags)
        RAII_VAR(struct ast_str *, buf,
                 ast_sip_create_ami_event("AorDetail", ami), ast_free);
 
-       int num;
+       int total_contacts;
+       int num_permanent;
        RAII_VAR(struct ao2_container *, contacts,
                 ast_sip_location_retrieve_aor_contacts(aor), ao2_cleanup);
 
@@ -363,10 +364,13 @@ static int format_ami_aor_handler(void *obj, void *arg, int flags)
        ast_str_truncate(buf, -1);
        ast_str_append(&buf, 0, "\r\n");
 
-       num = ao2_container_count(contacts);
-       ast_str_append(&buf, 0, "TotalContacts: %d\r\n", num);
+       total_contacts = ao2_container_count(contacts);
+       num_permanent = aor->permanent_contacts ?
+               ao2_container_count(aor->permanent_contacts) : 0;
+
+       ast_str_append(&buf, 0, "TotalContacts: %d\r\n", total_contacts);
        ast_str_append(&buf, 0, "ContactsRegistered: %d\r\n",
-                      num - ao2_container_count(aor->permanent_contacts));
+                      total_contacts - num_permanent);
        ast_str_append(&buf, 0, "EndpointName: %s\r\n",
                       ast_sorcery_object_get_id(endpoint));