forked from Mirrors/freeswitch
endless recursion loop protection to go with new recursive variable expansion feature
This commit is contained in:
parent
5f38a7f857
commit
f9b3266720
@ -593,8 +593,8 @@ SWITCH_DECLARE(void) switch_channel_event_set_extended_data(_In_ switch_channel_
|
||||
\return the original string if no expansion takes place otherwise a new string that must be freed
|
||||
\note it's necessary to test if the return val is the same as the input and free the string if it is not.
|
||||
*/
|
||||
SWITCH_DECLARE(char *) switch_channel_expand_variables_check(switch_channel_t *channel, const char *in, switch_event_t *var_list, switch_event_t *api_list);
|
||||
#define switch_channel_expand_variables(_channel, _in) switch_channel_expand_variables_check(_channel, _in, NULL, NULL)
|
||||
SWITCH_DECLARE(char *) switch_channel_expand_variables_check(switch_channel_t *channel, const char *in, switch_event_t *var_list, switch_event_t *api_list, uint32_t recur);
|
||||
#define switch_channel_expand_variables(_channel, _in) switch_channel_expand_variables_check(_channel, _in, NULL, NULL, 0)
|
||||
|
||||
|
||||
SWITCH_DECLARE(char *) switch_channel_build_param_string(_In_ switch_channel_t *channel, _In_opt_ switch_caller_profile_t *caller_profile,
|
||||
|
@ -330,8 +330,8 @@ SWITCH_DECLARE(switch_status_t) switch_event_add_body(switch_event_t *event, con
|
||||
|
||||
SWITCH_DECLARE(switch_status_t) switch_event_set_body(switch_event_t *event, const char *body);
|
||||
|
||||
SWITCH_DECLARE(char *) switch_event_expand_headers_check(switch_event_t *event, const char *in, switch_event_t *var_list, switch_event_t *api_list);
|
||||
#define switch_event_expand_headers(_event, _in) switch_event_expand_headers_check(_event, _in, NULL, NULL)
|
||||
SWITCH_DECLARE(char *) switch_event_expand_headers_check(switch_event_t *event, const char *in, switch_event_t *var_list, switch_event_t *api_list, uint32_t recur);
|
||||
#define switch_event_expand_headers(_event, _in) switch_event_expand_headers_check(_event, _in, NULL, NULL, 0)
|
||||
|
||||
SWITCH_DECLARE(switch_status_t) switch_event_create_pres_in_detailed(_In_z_ char *file, _In_z_ char *func, _In_ int line,
|
||||
_In_z_ const char *proto, _In_z_ const char *login,
|
||||
|
@ -3345,7 +3345,7 @@ SWITCH_DECLARE(switch_status_t) switch_channel_perform_answer(switch_channel_t *
|
||||
memset(c, 0, olen - cpos);\
|
||||
}} \
|
||||
|
||||
SWITCH_DECLARE(char *) switch_channel_expand_variables_check(switch_channel_t *channel, const char *in, switch_event_t *var_list, switch_event_t *api_list)
|
||||
SWITCH_DECLARE(char *) switch_channel_expand_variables_check(switch_channel_t *channel, const char *in, switch_event_t *var_list, switch_event_t *api_list, uint32_t recur)
|
||||
{
|
||||
char *p, *c = NULL;
|
||||
char *data, *indup, *endof_indup;
|
||||
@ -3354,6 +3354,10 @@ SWITCH_DECLARE(char *) switch_channel_expand_variables_check(switch_channel_t *c
|
||||
char *func_val = NULL, *sb = NULL;
|
||||
int nv = 0;
|
||||
|
||||
if (recur > 100) {
|
||||
return (char *) in;
|
||||
}
|
||||
|
||||
if (zstr(in)) {
|
||||
return (char *) in;
|
||||
}
|
||||
@ -3483,7 +3487,7 @@ SWITCH_DECLARE(char *) switch_channel_expand_variables_check(switch_channel_t *c
|
||||
char *ptr;
|
||||
int idx = -1;
|
||||
|
||||
if ((expanded = switch_channel_expand_variables_check(channel, (char *) vname, var_list, api_list)) == vname) {
|
||||
if ((expanded = switch_channel_expand_variables_check(channel, (char *) vname, var_list, api_list, recur+1)) == vname) {
|
||||
expanded = NULL;
|
||||
} else {
|
||||
vname = expanded;
|
||||
@ -3508,7 +3512,7 @@ SWITCH_DECLARE(char *) switch_channel_expand_variables_check(switch_channel_t *c
|
||||
sub_val = "INVALID";
|
||||
}
|
||||
|
||||
if ((expanded_sub_val = switch_channel_expand_variables(channel, sub_val)) == sub_val) {
|
||||
if ((expanded_sub_val = switch_channel_expand_variables_check(channel, sub_val, var_list, api_list, recur+1)) == sub_val) {
|
||||
expanded_sub_val = NULL;
|
||||
} else {
|
||||
sub_val = expanded_sub_val;
|
||||
@ -3547,13 +3551,13 @@ SWITCH_DECLARE(char *) switch_channel_expand_variables_check(switch_channel_t *c
|
||||
if (stream.data) {
|
||||
char *expanded_vname = NULL;
|
||||
|
||||
if ((expanded_vname = switch_channel_expand_variables_check(channel, (char *) vname, var_list, api_list)) == vname) {
|
||||
if ((expanded_vname = switch_channel_expand_variables_check(channel, (char *) vname, var_list, api_list, recur+1)) == vname) {
|
||||
expanded_vname = NULL;
|
||||
} else {
|
||||
vname = expanded_vname;
|
||||
}
|
||||
|
||||
if ((expanded = switch_channel_expand_variables_check(channel, vval, var_list, api_list)) == vval) {
|
||||
if ((expanded = switch_channel_expand_variables_check(channel, vval, var_list, api_list, recur+1)) == vval) {
|
||||
expanded = NULL;
|
||||
} else {
|
||||
vval = expanded;
|
||||
|
@ -1992,7 +1992,7 @@ if ((dp = realloc(data, olen))) {\
|
||||
memset(c, 0, olen - cpos);\
|
||||
}} \
|
||||
|
||||
SWITCH_DECLARE(char *) switch_event_expand_headers_check(switch_event_t *event, const char *in, switch_event_t *var_list, switch_event_t *api_list)
|
||||
SWITCH_DECLARE(char *) switch_event_expand_headers_check(switch_event_t *event, const char *in, switch_event_t *var_list, switch_event_t *api_list, uint32_t recur)
|
||||
{
|
||||
char *p, *c = NULL;
|
||||
char *data, *indup, *endof_indup;
|
||||
@ -2003,6 +2003,10 @@ SWITCH_DECLARE(char *) switch_event_expand_headers_check(switch_event_t *event,
|
||||
int nv = 0;
|
||||
char *gvar = NULL, *sb = NULL;
|
||||
|
||||
if (recur > 100) {
|
||||
return (char *) in;
|
||||
}
|
||||
|
||||
if (zstr(in)) {
|
||||
return (char *) in;
|
||||
}
|
||||
@ -2132,7 +2136,7 @@ SWITCH_DECLARE(char *) switch_event_expand_headers_check(switch_event_t *event,
|
||||
char *ptr;
|
||||
int idx = -1;
|
||||
|
||||
if ((expanded = switch_event_expand_headers_check(event, (char *) vname, var_list, api_list)) == vname) {
|
||||
if ((expanded = switch_event_expand_headers_check(event, (char *) vname, var_list, api_list, recur+1)) == vname) {
|
||||
expanded = NULL;
|
||||
} else {
|
||||
vname = expanded;
|
||||
@ -2162,7 +2166,7 @@ SWITCH_DECLARE(char *) switch_event_expand_headers_check(switch_event_t *event,
|
||||
}
|
||||
|
||||
|
||||
if ((expanded_sub_val = switch_event_expand_headers(event, sub_val)) == sub_val) {
|
||||
if ((expanded_sub_val = switch_event_expand_headers_check(event, sub_val, var_list, api_list, recur+1)) == sub_val) {
|
||||
expanded_sub_val = NULL;
|
||||
} else {
|
||||
sub_val = expanded_sub_val;
|
||||
@ -2198,13 +2202,13 @@ SWITCH_DECLARE(char *) switch_event_expand_headers_check(switch_event_t *event,
|
||||
if (stream.data) {
|
||||
char *expanded_vname = NULL;
|
||||
|
||||
if ((expanded_vname = switch_event_expand_headers_check(event, (char *) vname, var_list, api_list)) == vname) {
|
||||
if ((expanded_vname = switch_event_expand_headers_check(event, (char *) vname, var_list, api_list, recur+1)) == vname) {
|
||||
expanded_vname = NULL;
|
||||
} else {
|
||||
vname = expanded_vname;
|
||||
}
|
||||
|
||||
if ((expanded = switch_event_expand_headers_check(event, vval, var_list, api_list)) == vval) {
|
||||
if ((expanded = switch_event_expand_headers_check(event, vval, var_list, api_list, recur+1)) == vval) {
|
||||
expanded = NULL;
|
||||
} else {
|
||||
vval = expanded;
|
||||
|
Loading…
Reference in New Issue
Block a user