mirror of
https://github.com/asterisk/asterisk.git
synced 2025-11-20 16:50:14 +00:00
Protect channel access in CONNECTED_LINE and REDIRECTING interception macro launch code.
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.8@288079 65c4cc65-6c06-0410-ace0-fbb531ad65f3
This commit is contained in:
@@ -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
|
macro_args = pbx_builtin_getvar_helper(macro_chan, is_caller
|
||||||
? "CONNECTED_LINE_CALLER_SEND_MACRO_ARGS" : "CONNECTED_LINE_CALLEE_SEND_MACRO_ARGS");
|
? "CONNECTED_LINE_CALLER_SEND_MACRO_ARGS" : "CONNECTED_LINE_CALLEE_SEND_MACRO_ARGS");
|
||||||
macro_args = ast_strdupa(S_OR(macro_args, ""));
|
macro_args = ast_strdupa(S_OR(macro_args, ""));
|
||||||
ast_channel_unlock(macro_chan);
|
|
||||||
|
|
||||||
if (ast_strlen_zero(macro)) {
|
if (ast_strlen_zero(macro)) {
|
||||||
|
ast_channel_unlock(macro_chan);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -8790,9 +8790,12 @@ int ast_channel_connected_line_macro(struct ast_channel *autoservice_chan, struc
|
|||||||
|
|
||||||
ast_party_connected_line_copy(¯o_chan->connected, connected);
|
ast_party_connected_line_copy(¯o_chan->connected, connected);
|
||||||
}
|
}
|
||||||
|
ast_channel_unlock(macro_chan);
|
||||||
|
|
||||||
if (!(retval = ast_app_run_macro(autoservice_chan, macro_chan, macro, macro_args))) {
|
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, ¯o_chan->connected, NULL);
|
ast_channel_update_connected_line(macro_chan, ¯o_chan->connected, NULL);
|
||||||
|
ast_channel_unlock(macro_chan);
|
||||||
}
|
}
|
||||||
|
|
||||||
return retval;
|
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
|
macro_args = pbx_builtin_getvar_helper(macro_chan, is_caller
|
||||||
? "REDIRECTING_CALLER_SEND_MACRO_ARGS" : "REDIRECTING_CALLEE_SEND_MACRO_ARGS");
|
? "REDIRECTING_CALLER_SEND_MACRO_ARGS" : "REDIRECTING_CALLEE_SEND_MACRO_ARGS");
|
||||||
macro_args = ast_strdupa(S_OR(macro_args, ""));
|
macro_args = ast_strdupa(S_OR(macro_args, ""));
|
||||||
ast_channel_unlock(macro_chan);
|
|
||||||
|
|
||||||
if (ast_strlen_zero(macro)) {
|
if (ast_strlen_zero(macro)) {
|
||||||
|
ast_channel_unlock(macro_chan);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -8826,10 +8829,13 @@ int ast_channel_redirecting_macro(struct ast_channel *autoservice_chan, struct a
|
|||||||
|
|
||||||
ast_party_redirecting_copy(¯o_chan->redirecting, redirecting);
|
ast_party_redirecting_copy(¯o_chan->redirecting, redirecting);
|
||||||
}
|
}
|
||||||
|
ast_channel_unlock(macro_chan);
|
||||||
|
|
||||||
retval = ast_app_run_macro(autoservice_chan, macro_chan, macro, macro_args);
|
retval = ast_app_run_macro(autoservice_chan, macro_chan, macro, macro_args);
|
||||||
if (!retval) {
|
if (!retval) {
|
||||||
|
ast_channel_lock(macro_chan);
|
||||||
ast_channel_update_redirecting(macro_chan, ¯o_chan->redirecting, NULL);
|
ast_channel_update_redirecting(macro_chan, ¯o_chan->redirecting, NULL);
|
||||||
|
ast_channel_unlock(macro_chan);
|
||||||
}
|
}
|
||||||
|
|
||||||
return retval;
|
return retval;
|
||||||
|
|||||||
Reference in New Issue
Block a user