aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorrmudgett <rmudgett@f38db490-d61c-443f-a65b-d21fe96a405b>2010-09-21 20:29:51 +0000
committerrmudgett <rmudgett@f38db490-d61c-443f-a65b-d21fe96a405b>2010-09-21 20:29:51 +0000
commitba9b7abab46e5ae063f17bd339cd1956bf5c521e (patch)
tree06cc2ec351962a221380731f02f460869b065977
parent24868df175aa264708c10f285e286c787ef8d4d5 (diff)
Protect channel access in CONNECTED_LINE and REDIRECTING interception macro launch code.
git-svn-id: http://svn.digium.com/svn/asterisk/branches/1.8@288079 f38db490-d61c-443f-a65b-d21fe96a405b
-rw-r--r--main/channel.c10
1 files changed, 8 insertions, 2 deletions
diff --git a/main/channel.c b/main/channel.c
index 29066ebf8..880220e91 100644
--- a/main/channel.c
+++ b/main/channel.c
@@ -8775,9 +8775,9 @@ int ast_channel_connected_line_macro(struct ast_channel *autoservice_chan, struc
macro_args = pbx_builtin_getvar_helper(macro_chan, is_caller
? "CONNECTED_LINE_CALLER_SEND_MACRO_ARGS" : "CONNECTED_LINE_CALLEE_SEND_MACRO_ARGS");
macro_args = ast_strdupa(S_OR(macro_args, ""));
- ast_channel_unlock(macro_chan);
if (ast_strlen_zero(macro)) {
+ ast_channel_unlock(macro_chan);
return -1;
}
@@ -8790,9 +8790,12 @@ int ast_channel_connected_line_macro(struct ast_channel *autoservice_chan, struc
ast_party_connected_line_copy(&macro_chan->connected, connected);
}
+ ast_channel_unlock(macro_chan);
if (!(retval = ast_app_run_macro(autoservice_chan, macro_chan, macro, macro_args))) {
+ ast_channel_lock(macro_chan);
ast_channel_update_connected_line(macro_chan, &macro_chan->connected, NULL);
+ ast_channel_unlock(macro_chan);
}
return retval;
@@ -8811,9 +8814,9 @@ int ast_channel_redirecting_macro(struct ast_channel *autoservice_chan, struct a
macro_args = pbx_builtin_getvar_helper(macro_chan, is_caller
? "REDIRECTING_CALLER_SEND_MACRO_ARGS" : "REDIRECTING_CALLEE_SEND_MACRO_ARGS");
macro_args = ast_strdupa(S_OR(macro_args, ""));
- ast_channel_unlock(macro_chan);
if (ast_strlen_zero(macro)) {
+ ast_channel_unlock(macro_chan);
return -1;
}
@@ -8826,10 +8829,13 @@ int ast_channel_redirecting_macro(struct ast_channel *autoservice_chan, struct a
ast_party_redirecting_copy(&macro_chan->redirecting, redirecting);
}
+ ast_channel_unlock(macro_chan);
retval = ast_app_run_macro(autoservice_chan, macro_chan, macro, macro_args);
if (!retval) {
+ ast_channel_lock(macro_chan);
ast_channel_update_redirecting(macro_chan, &macro_chan->redirecting, NULL);
+ ast_channel_unlock(macro_chan);
}
return retval;