SWITCH_DECLARE(char *) switch_channel_expand_variables(switch_channel_t *channel, const char *in)
{
char *p, *c = NULL;
- char *data, *indup;
+ char *data, *indup, *endof_indup;
size_t sp = 0, len = 0, olen = 0, vtype = 0, br = 0, cpos, block = 128;
const char *q;
char *cloned_sub_val = NULL, *sub_val = NULL;
nv = 0;
olen = strlen(in) + 1;
indup = strdup(in);
+ endof_indup = end_of_p(indup);
if ((data = malloc(olen))) {
memset(data, 0, olen);
c = data;
- for (p = indup; p && *p; p++) {
+ for (p = indup; p && p < endof_indup && *p; p++) {
vtype = 0;
if (*p == '\\') {
e++;
}
- p = e;
+ p = e > endof_indup ? endof_indup : e;
if ((vval = strchr(vname, '('))) {
e = vval - 1;
SWITCH_DECLARE(char *) switch_event_expand_headers(switch_event_t *event, const char *in)
{
char *p, *c = NULL;
- char *data, *indup;
+ char *data, *indup, *endof_indup;
size_t sp = 0, len = 0, olen = 0, vtype = 0, br = 0, cpos, block = 128;
const char *q, *sub_val = NULL;
char *cloned_sub_val = NULL;
nv = 0;
olen = strlen(in) + 1;
indup = strdup(in);
+ endof_indup = end_of_p(indup);
if ((data = malloc(olen))) {
memset(data, 0, olen);
c = data;
- for (p = indup; p && *p; p++) {
+ for (p = indup; p && p < endof_indup && *p; p++) {
vtype = 0;
if (*p == '\\') {
e++;
}
- p = e;
+ p = e > endof_indup ? endof_indup : e;
if ((vval = strchr(vname, '('))) {
e = vval - 1;