Index: funcs/func_cut.c =================================================================== --- funcs/func_cut.c (revision 48271) +++ funcs/func_cut.c (working copy) @@ -137,6 +137,7 @@ char d, ds[2]; char *tmp = alloca(strlen(args.varname) + 4); char varvalue[MAXRESULT], *tmp2=varvalue; + char rangevalue[MAXRESULT], *range; if (tmp) { snprintf(tmp, strlen(args.varname) + 4, "${%s}", args.varname); @@ -152,6 +153,13 @@ pbx_substitute_variables_helper(chan, tmp, tmp2, MAXRESULT - 1); + /* Allow the range specifier to be a ${variable} or $[expression] */ + if (*args.field == '$') { + memset(range=rangevalue, 0, sizeof(rangevalue)); + pbx_substitute_variables_helper(chan, args.field, range, MAXRESULT - 1); + args.field = range; + } + if (tmp2) { int curfieldnum = 1; while (tmp2 != NULL && args.field != NULL) {