mirror of
https://github.com/asterisk/asterisk.git
synced 2025-10-02 10:22:46 +00:00
res_pjsip: Fix contact refleak on stateful responses.
When sending a stateful response, creation of the transaction can fail, most commonly because we are trying to create a transaction from a retransmitted request. When creation of the transaction fails, we end up leaking a reference to a contact that was bumped when the response was created. This patch adds the missing deref and fixes the reference leak. Change-Id: I2f97ad512aeb1b17e87ca29ae0abacb4d6395f07
This commit is contained in:
@@ -3682,6 +3682,14 @@ int ast_sip_send_stateful_response(pjsip_rx_data *rdata, pjsip_tx_data *tdata, s
|
|||||||
pjsip_transaction *tsx;
|
pjsip_transaction *tsx;
|
||||||
|
|
||||||
if (pjsip_tsx_create_uas(NULL, rdata, &tsx) != PJ_SUCCESS) {
|
if (pjsip_tsx_create_uas(NULL, rdata, &tsx) != PJ_SUCCESS) {
|
||||||
|
struct ast_sip_contact *contact;
|
||||||
|
|
||||||
|
/* ast_sip_create_response bumps the refcount of the contact and adds it to the tdata.
|
||||||
|
* We'll leak that reference if we don't get rid of it here.
|
||||||
|
*/
|
||||||
|
contact = ast_sip_mod_data_get(tdata->mod_data, supplement_module.id, MOD_DATA_CONTACT);
|
||||||
|
ao2_cleanup(contact);
|
||||||
|
ast_sip_mod_data_set(tdata->pool, tdata->mod_data, supplement_module.id, MOD_DATA_CONTACT, NULL);
|
||||||
pjsip_tx_data_dec_ref(tdata);
|
pjsip_tx_data_dec_ref(tdata);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user