FS-10867: [freeswitch-core] Prevent stack smash when queing multiple sound files without event-lock #resolve

This commit is contained in:
Brian West 2018-01-02 18:37:23 -06:00 committed by Muteesa Fred
parent 1a2d406e86
commit 291da11322
3 changed files with 20 additions and 0 deletions

View File

@ -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

View File

@ -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)
{

View File

@ -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;
}