[Asterisk-code-review] res pjsip: Fix tdata leaks in off nominal paths. (asterisk[master])
Joshua Colp
asteriskteam at digium.com
Mon Nov 14 06:47:38 CST 2016
Joshua Colp has submitted this change and it was merged. ( https://gerrit.asterisk.org/4386 )
Change subject: res_pjsip: Fix tdata leaks in off nominal paths.
......................................................................
res_pjsip: Fix tdata leaks in off nominal paths.
Change-Id: Ie83e06e88c2d60157775263b07e40b61718ac97b
---
M res/res_pjsip.c
M res/res_pjsip_outbound_registration.c
M res/res_pjsip_pubsub.c
3 files changed, 12 insertions(+), 11 deletions(-)
Approvals:
George Joseph: Looks good to me, but someone else must approve
Anonymous Coward #1000019: Verified
Joshua Colp: Looks good to me, approved
diff --git a/res/res_pjsip.c b/res/res_pjsip.c
index 916c464..655cd95 100644
--- a/res/res_pjsip.c
+++ b/res/res_pjsip.c
@@ -3557,6 +3557,7 @@
pj_strbuf(&tdata->msg->line.req.method.name),
endpoint ? ast_sorcery_object_get_id(endpoint) : "<unknown>");
ao2_t_ref(req_wrapper, -2, "Drop timer and routine ref");
+ pjsip_tx_data_dec_ref(tdata);
return ret_val;
}
diff --git a/res/res_pjsip_outbound_registration.c b/res/res_pjsip_outbound_registration.c
index 62fe6da..29701a1 100644
--- a/res/res_pjsip_outbound_registration.c
+++ b/res/res_pjsip_outbound_registration.c
@@ -514,6 +514,7 @@
callback_invoked = ast_threadstorage_get(®ister_callback_invoked, sizeof(int));
if (!callback_invoked) {
+ pjsip_tx_data_dec_ref(tdata);
return PJ_ENOMEM;
}
*callback_invoked = 0;
@@ -567,6 +568,7 @@
/* insert a new Supported header */
hdr = pjsip_supported_hdr_create(tdata->pool);
if (!hdr) {
+ pjsip_tx_data_dec_ref(tdata);
return -1;
}
diff --git a/res/res_pjsip_pubsub.c b/res/res_pjsip_pubsub.c
index 015ef99..43a9d4b 100644
--- a/res/res_pjsip_pubsub.c
+++ b/res/res_pjsip_pubsub.c
@@ -1802,6 +1802,7 @@
if (allocate_tdata_buffer(tdata)) {
ast_log(LOG_ERROR, "SIP request %s is too large to send.\n", tdata->info);
+ pjsip_tx_data_dec_ref(tdata);
return -1;
}
@@ -2912,7 +2913,6 @@
static int sip_publication_respond(struct ast_sip_publication *pub, int status_code,
pjsip_rx_data *rdata)
{
- pj_status_t status;
pjsip_tx_data *tdata;
pjsip_transaction *tsx;
@@ -2921,26 +2921,24 @@
}
if (PJSIP_IS_STATUS_IN_CLASS(status_code, 200)) {
- RAII_VAR(char *, entity_tag, NULL, ast_free_ptr);
- RAII_VAR(char *, expires, NULL, ast_free_ptr);
+ char buf[30];
- if ((ast_asprintf(&entity_tag, "%d", pub->entity_tag) < 0) ||
- (ast_asprintf(&expires, "%d", pub->expires) < 0)) {
- pjsip_tx_data_dec_ref(tdata);
- return -1;
- }
+ snprintf(buf, sizeof(buf), "%d", pub->entity_tag);
+ ast_sip_add_header(tdata, "SIP-ETag", buf);
- ast_sip_add_header(tdata, "SIP-ETag", entity_tag);
- ast_sip_add_header(tdata, "Expires", expires);
+ snprintf(buf, sizeof(buf), "%d", pub->expires);
+ ast_sip_add_header(tdata, "Expires", buf);
}
- if ((status = pjsip_tsx_create_uas(&pubsub_module, rdata, &tsx)) != PJ_SUCCESS) {
+ if (pjsip_tsx_create_uas(&pubsub_module, rdata, &tsx) != PJ_SUCCESS) {
+ pjsip_tx_data_dec_ref(tdata);
return -1;
}
pjsip_tsx_recv_msg(tsx, rdata);
if (pjsip_tsx_send_msg(tsx, tdata) != PJ_SUCCESS) {
+ pjsip_tx_data_dec_ref(tdata);
return -1;
}
--
To view, visit https://gerrit.asterisk.org/4386
To unsubscribe, visit https://gerrit.asterisk.org/settings
Gerrit-MessageType: merged
Gerrit-Change-Id: Ie83e06e88c2d60157775263b07e40b61718ac97b
Gerrit-PatchSet: 1
Gerrit-Project: asterisk
Gerrit-Branch: master
Gerrit-Owner: Richard Mudgett <rmudgett at digium.com>
Gerrit-Reviewer: Anonymous Coward #1000019
Gerrit-Reviewer: George Joseph <gjoseph at digium.com>
Gerrit-Reviewer: Joshua Colp <jcolp at digium.com>
More information about the asterisk-code-review
mailing list