From: Anthony Minessale Date: Fri, 8 Nov 2013 17:36:35 +0000 (+0500) Subject: FS-5945 --resolve X-Git-Tag: v1.5.7~83 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=92f6986b406d01c646e3cdecec861cab9dd36b87;p=thirdparty%2Ffreeswitch.git FS-5945 --resolve --- diff --git a/src/mod/applications/mod_commands/mod_commands.c b/src/mod/applications/mod_commands/mod_commands.c index 2e4259817a..4a3153de5a 100644 --- a/src/mod/applications/mod_commands/mod_commands.c +++ b/src/mod/applications/mod_commands/mod_commands.c @@ -1929,40 +1929,91 @@ SWITCH_STANDARD_API(cond_function) } a = argv[0]; + while(*a == ' ' || *a == '\t') a++; - if ((expr = strchr(a, '!'))) { + if (*a == '\'') { + if ((expr = switch_find_end_paren(a, '\'', '\''))) { + a++; + *expr++ = '\0'; + } else { + goto error; + } + } else { + if ((expr = strchr(a, ' '))) { + *expr++ = '\0'; + } else { + expr = a; + } + } + + while(expr && *expr) { + switch(*expr) { + case '!': + case '<': + case '>': + case '=': + goto done; + default: + expr++; + break; + } + } + + done: + + switch(*expr) { + case '!': *expr++ = '\0'; if (*expr == '=') { o = O_NE; - } - } else if ((expr = strchr(a, '>'))) { - if (*(expr + 1) == '=') { *expr++ = '\0'; + } + break; + + case '>': + *expr++ = '\0'; + if (*expr == '=') { o = O_GE; + *expr++ = '\0'; } else { o = O_GT; } - } else if ((expr = strchr(a, '<'))) { - if (*(expr + 1) == '=') { - *expr++ = '\0'; + break; + + case '<': + *expr++ = '\0'; + if (*expr == '=') { o = O_LE; + *expr++ = '\0'; } else { o = O_LT; } - } else if ((expr = strchr(a, '='))) { + break; + + case '=': *expr++ = '\0'; if (*expr == '=') { o = O_EQ; + *expr++ = '\0'; } + break; + + default: + goto error; } + if (o) { char *s_a = NULL, *s_b = NULL; int a_is_num, b_is_num; - *expr++ = '\0'; + + expr++; b = expr; + s_a = switch_strip_spaces(a, SWITCH_TRUE); s_b = switch_strip_spaces(b, SWITCH_TRUE); + + a_is_num = switch_is_number(s_a); b_is_num = switch_is_number(s_b);