Index: funcs/func_strings.c =================================================================== RCS file: /usr/cvsroot/asterisk/funcs/func_strings.c,v retrieving revision 1.8 diff -u -r1.8 func_strings.c --- funcs/func_strings.c 25 Sep 2005 20:47:00 -0000 1.8 +++ funcs/func_strings.c 12 Oct 2005 00:47:21 -0000 @@ -69,39 +69,43 @@ static char *builtin_function_regex(struct ast_channel *chan, char *cmd, char *data, char *buf, size_t len) { - char *ret_true = "1", *ret_false = "0", *ret; char *arg, *earg, *tmp, errstr[256] = ""; int errcode; regex_t regexbuf; - ret = ret_false; /* convince me otherwise */ + ast_copy_string(buf, "0", len); + tmp = ast_strdupa(data); - if (tmp) { - /* Regex in quotes */ - arg = strchr(tmp, '"'); - if (arg) { - arg++; - earg = strrchr(arg, '"'); - if (earg) { - *earg = '\0'; - } - } else { - arg = tmp; - } + if (!tmp) { + ast_log(LOG_ERROR, "Out of memory in %s(%s)\n", cmd, data); + return buf; + } - if ((errcode = regcomp(®exbuf, arg, REG_EXTENDED | REG_NOSUB))) { - regerror(errcode, ®exbuf, errstr, sizeof(errstr)); - ast_log(LOG_WARNING, "Malformed input %s(%s): %s\n", cmd, data, errstr); - ret = NULL; - } else { - ret = regexec(®exbuf, data, 0, NULL, 0) ? ret_false : ret_true; + /* Regex in quotes */ + arg = strchr(tmp, '"'); + if (arg) { + arg++; + earg = strrchr(arg, '"'); + if (earg) { + *earg++ = '\0'; + /* Skip over any spaces before the data we are checking */ + while (*earg == ' ') + earg++; } - regfree(®exbuf); } else { - ast_log(LOG_ERROR, "Out of memory in %s(%s)\n", cmd, data); + arg = tmp; + } + + if ((errcode = regcomp(®exbuf, arg, REG_EXTENDED | REG_NOSUB))) { + regerror(errcode, ®exbuf, errstr, sizeof(errstr)); + ast_log(LOG_WARNING, "Malformed input %s(%s): %s\n", cmd, data, errstr); + } else { + if (!regexec(®exbuf, earg ? earg : "", 0, NULL, 0)) + ast_copy_string(buf, "1", len); } + regfree(®exbuf); - return ret; + return buf; } #ifndef BUILTIN_FUNC