From: George Joseph Date: Fri, 29 May 2015 21:19:26 +0000 (-0600) Subject: res_pjsip/location: Fix memory leak in permanent_uri_handler X-Git-Tag: 13.5.0-rc1~114 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=857166b5e5dbdb81b4c25a42f36842a394989768;p=thirdparty%2Fasterisk.git res_pjsip/location: Fix memory leak in permanent_uri_handler When permanent_uri_handler was creating the contact status object for each contact, it wasn't unreffing it at the end of the loop. ASTERISK-25141 #close Reported-by: Corey Farrell Change-Id: I7bb127994677bb3d459f87952f8425c9b9967b12 --- diff --git a/res/res_pjsip/location.c b/res/res_pjsip/location.c index 887053b07b..9e75929d78 100644 --- a/res/res_pjsip/location.c +++ b/res/res_pjsip/location.c @@ -354,6 +354,7 @@ static int permanent_uri_handler(const struct aco_option *opt, struct ast_variab contacts = ast_strdupa(var->value); while ((contact_uri = strsep(&contacts, ","))) { struct ast_sip_contact *contact; + struct ast_sip_contact_status *status; char contact_id[strlen(aor_id) + strlen(contact_uri) + 2 + 1]; if (ast_sip_push_task_synchronous(NULL, permanent_contact_validate, contact_uri)) { @@ -376,10 +377,12 @@ static int permanent_uri_handler(const struct aco_option *opt, struct ast_variab return -1; } - if (!ast_res_pjsip_find_or_create_contact_status(contact)) { + status = ast_res_pjsip_find_or_create_contact_status(contact); + if (!status) { ao2_ref(contact, -1); return -1; } + ao2_ref(status, -1); ast_string_field_set(contact, uri, contact_uri); ao2_link(aor->permanent_contacts, contact);