提交 3df37973 authored 作者: Brian West's avatar Brian West 提交者: Mike Jerris

FS-10867: [freeswitch-core] Prevent stack smash when queing multiple sound files…

FS-10867: [freeswitch-core] Prevent stack smash when queing multiple sound files without event-lock #resolve
上级 1352a5f0
......@@ -1117,6 +1117,8 @@ SWITCH_DECLARE(switch_status_t) switch_core_session_get_app_flags(const char *ap
*/
#define switch_core_session_execute_application(_a, _b, _c) switch_core_session_execute_application_get_flags(_a, _b, _c, NULL)
SWITCH_DECLARE(uint32_t) switch_core_session_stack_count(switch_core_session_t *session, int x);
/*!
\brief Run a dialplan and execute an extension
\param session the current session
......
......@@ -2895,6 +2895,14 @@ SWITCH_DECLARE(switch_status_t) switch_core_session_exec(switch_core_session_t *
return SWITCH_STATUS_SUCCESS;
}
SWITCH_DECLARE(uint32_t) switch_core_session_stack_count(switch_core_session_t *session, int x)
{
if (x > 0) session->stack_count++;
else if (x < 0) session->stack_count--;
return session->stack_count;
}
SWITCH_DECLARE(switch_status_t) switch_core_session_execute_exten(switch_core_session_t *session, const char *exten, const char *dialplan,
const char *context)
{
......
......@@ -898,6 +898,14 @@ SWITCH_DECLARE(switch_status_t) switch_ivr_parse_all_events(switch_core_session_
int x = 0;
switch_channel_t *channel;
if (switch_core_session_stack_count(session, 0) > SWITCH_MAX_STACKS) {
switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(session), SWITCH_LOG_ERROR, "Error %s too many stacked extensions\n",
switch_core_session_get_name(session));
return SWITCH_STATUS_FALSE;
}
switch_core_session_stack_count(session, 1);
switch_ivr_parse_all_messages(session);
channel = switch_core_session_get_channel(session);
......@@ -914,6 +922,8 @@ SWITCH_DECLARE(switch_status_t) switch_ivr_parse_all_events(switch_core_session_
x++;
}
switch_core_session_stack_count(session, -1);
return SWITCH_STATUS_SUCCESS;
}
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论