From: Alexei Gradinari Date: Tue, 9 Apr 2019 21:47:59 +0000 (-0400) Subject: res_pjsip: Fix transport_states ref leak X-Git-Tag: 13.27.0-rc1~28^2 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=cb24eb4cc2deb2a1bf1f609d0df7024d217611b8;p=thirdparty%2Fasterisk.git res_pjsip: Fix transport_states ref leak Add missing ao2_ref(transport_state, -1) while iterate on a transport_states container. Change-Id: I40e35b5a339121300c80075c30db47201a6c374e --- diff --git a/res/res_pjsip/pjsip_message_filter.c b/res/res_pjsip/pjsip_message_filter.c index 8a6321979d..5fe19f96f8 100644 --- a/res/res_pjsip/pjsip_message_filter.c +++ b/res/res_pjsip/pjsip_message_filter.c @@ -110,14 +110,13 @@ static pjsip_transport *get_udp_transport(pj_str_t *address, int port) } for (iter = ao2_iterator_init(transport_states, 0); (transport_state = ao2_iterator_next(&iter)); ao2_ref(transport_state, -1)) { - if (transport_state && ((transport_state->type != AST_TRANSPORT_UDP) || - (pj_strcmp(&transport_state->transport->local_name.host, address)) || - (transport_state->transport->local_name.port != port))) { - continue; + if (transport_state->type == AST_TRANSPORT_UDP && + !pj_strcmp(&transport_state->transport->local_name.host, address) && + transport_state->transport->local_name.port == port) { + sip_transport = transport_state->transport; + ao2_ref(transport_state, -1); + break; } - - sip_transport = transport_state->transport; - break; } ao2_iterator_destroy(&iter);