FS-10867: [freeswitch-core] Prevent stack smash when queing multiple sound files without event-lock #resolve
This commit is contained in:
parent
1a2d406e86
commit
291da11322
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue