From: Corey Farrell Date: Sun, 31 May 2015 01:22:00 +0000 (-0400) Subject: pjsip_configuration: Fix leak in persistent_endpoint_update_state. X-Git-Tag: 13.5.0-rc1~113 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=9e7827e3ac057f22bc17823a44778b76270c5901;p=thirdparty%2Fasterisk.git pjsip_configuration: Fix leak in persistent_endpoint_update_state. The loop to find the first available contact of an endpoint grabbed contact from the iterator, then checked for offline state. This caused the first contact after the state was found to leak a reference. ASTERISK-25141 Change-Id: Id0f1d87410fc63742db0594eb4b18b36e99aec08 --- diff --git a/res/res_pjsip/pjsip_configuration.c b/res/res_pjsip/pjsip_configuration.c index a1c75e2a96..34bb692112 100644 --- a/res/res_pjsip/pjsip_configuration.c +++ b/res/res_pjsip/pjsip_configuration.c @@ -103,8 +103,7 @@ static int persistent_endpoint_update_state(void *obj, void *arg, void *data, in contacts = ast_sip_location_retrieve_contacts_from_aor_list(persistent->aors); if (contacts) { i = ao2_iterator_init(contacts, 0); - while ((contact = ao2_iterator_next(&i)) - && state == AST_ENDPOINT_OFFLINE) { + while (state == AST_ENDPOINT_OFFLINE && (contact = ao2_iterator_next(&i))) { struct ast_sip_contact_status *contact_status; const char *contact_id = ast_sorcery_object_get_id(contact);