]> git.ipfire.org Git - thirdparty/asterisk.git/commitdiff
Merged revisions 244331 via svnmerge from
authorTilghman Lesher <tilghman@meg.abyt.es>
Tue, 2 Feb 2010 18:59:37 +0000 (18:59 +0000)
committerTilghman Lesher <tilghman@meg.abyt.es>
Tue, 2 Feb 2010 18:59:37 +0000 (18:59 +0000)
https://origsvn.digium.com/svn/asterisk/trunk

........
  r244331 | tilghman | 2010-02-02 12:54:33 -0600 (Tue, 02 Feb 2010) | 9 lines

  Correct some off-by-one errors, especially when expressions don't contain expected spaces.

  Also include the tests provided by the reporter, as regression tests.

  (closes issue #16667)
   Reported by: wdoekes
   Patches:
         astsvn-func_match-off-by-one.diff uploaded by wdoekes (license 717)
........

git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.6.2@244334 65c4cc65-6c06-0410-ace0-fbb531ad65f3

funcs/func_math.c

index 99c4ac35ca3b417ecb5abc0d1a2343a4fc1a890f..cc232029f2422ee4adea61e6dd8cea9af78680e3 100644 (file)
@@ -143,47 +143,47 @@ static int math(struct ast_channel *chan, const char *cmd, char *parse,
                *op = '\0';
        } else if ((op = strstr(mvalue1, "AND"))) {
                iaction = BITWISEANDFUNCTION;
-               op += 3;
                *op = '\0';
+               op += 2;
        } else if ((op = strstr(mvalue1, "XOR"))) {
                iaction = BITWISEXORFUNCTION;
-               op += 3;
                *op = '\0';
+               op += 2;
        } else if ((op = strstr(mvalue1, "OR"))) {
                iaction = BITWISEORFUNCTION;
-               op += 2;
                *op = '\0';
+               ++op;
        } else if ((op = strchr(mvalue1, '>'))) {
                iaction = GTFUNCTION;
                *op = '\0';
                if (*(op + 1) == '=') {
-                       *++op = '\0';
                        iaction = GTEFUNCTION;
+                       ++op;
                } else if (*(op + 1) == '>') {
-                       *++op = '\0';
                        iaction = SHRIGHTFUNCTION;
+                       ++op;
                }
        } else if ((op = strchr(mvalue1, '<'))) {
                iaction = LTFUNCTION;
                *op = '\0';
                if (*(op + 1) == '=') {
-                       *++op = '\0';
                        iaction = LTEFUNCTION;
+                       ++op;
                } else if (*(op + 1) == '<') {
-                       *++op = '\0';
                        iaction = SHLEFTFUNCTION;
+                       ++op;
                }
        } else if ((op = strchr(mvalue1, '='))) {
                *op = '\0';
                if (*(op + 1) == '=') {
-                       *++op = '\0';
                        iaction = EQFUNCTION;
+                       ++op;
                } else
                        op = NULL;
        } else if ((op = strchr(mvalue1, '+'))) {
                iaction = ADDFUNCTION;
                *op = '\0';
-       } else if ((op = strchr(mvalue1, '-'))) { /* subtraction MUST always be last, in case we have a negative first number */
+       } else if ((op = strchr(mvalue1, '-'))) { /* subtraction MUST always be last, in case we have a negative second number */
                iaction = SUBTRACTFUNCTION;
                *op = '\0';
        }