diff options
author | Richard Mudgett <rmudgett@digium.com> | 2014-04-30 21:03:29 +0000 |
---|---|---|
committer | Richard Mudgett <rmudgett@digium.com> | 2014-04-30 21:03:29 +0000 |
commit | 20750e261b3cc1cd954ac3de839afadcc4817d8d (patch) | |
tree | 6d0f7ff8367b5ce0d7a2930bc219c9b058942ed6 /channels/chan_sip.c | |
parent | f2a060f5027367de68fb298c31bb661e45cf7f7a (diff) |
chan_sip.c: Fixed off-nominal message iterator ref count and alloc fail issues.
* Fixed early exit in sip_msg_send() not destroying the message iterator.
* Made ast_msg_var_iterator_next() and ast_msg_var_iterator_destroy()
tolerant of a NULL iter parameter in case ast_msg_var_iterator_init()
fails.
* Made ast_msg_var_iterator_destroy() clean up any current message data
ref.
* Made struct ast_msg_var_iterator, ast_msg_var_iterator_init(),
ast_msg_var_iterator_next(), ast_msg_var_unref_current(), and
ast_msg_var_iterator_destroy() use iter instead of i.
* Eliminated RAII_VAR usage in res_pjsip_messaging.c:vars_to_headers().
........
Merged revisions 413139 from http://svn.asterisk.org/svn/asterisk/branches/11
........
Merged revisions 413142 from http://svn.asterisk.org/svn/asterisk/branches/12
git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@413144 65c4cc65-6c06-0410-ace0-fbb531ad65f3
Diffstat (limited to 'channels/chan_sip.c')
-rw-r--r-- | channels/chan_sip.c | 8 |
1 files changed, 4 insertions, 4 deletions
diff --git a/channels/chan_sip.c b/channels/chan_sip.c index 694ab7478..2ff1c5010 100644 --- a/channels/chan_sip.c +++ b/channels/chan_sip.c @@ -26715,12 +26715,11 @@ static int sip_msg_send(const struct ast_msg *msg, const char *to, const char *f return -1; } - for (iter = ast_msg_var_iterator_init(msg); - ast_msg_var_iterator_next(msg, iter, &var, &val); - ast_msg_var_unref_current(iter)) { + for (iter = ast_msg_var_iterator_init(msg); + ast_msg_var_iterator_next(msg, iter, &var, &val); + ast_msg_var_unref_current(iter)) { if (!strcasecmp(var, "Request-URI")) { ast_string_field_set(pvt, fullcontact, val); - ast_msg_var_unref_current(iter); break; } } @@ -26805,6 +26804,7 @@ static int sip_msg_send(const struct ast_msg *msg, const char *to, const char *f if (!strcasecmp(var, "Max-Forwards")) { /* Decrement Max-Forwards for SIP loop prevention. */ if (sscanf(val, "%30d", &pvt->maxforwards) != 1 || pvt->maxforwards < 1) { + ast_msg_var_iterator_destroy(iter); sip_pvt_unlock(pvt); dialog_unlink_all(pvt); dialog_unref(pvt, "MESSAGE(Max-Forwards) reached zero."); |