]> git.ipfire.org Git - thirdparty/asterisk.git/commitdiff
Fix setvar issue (bug #3010)
authorRussell Bryant <russell@russellbryant.com>
Fri, 10 Dec 2004 23:19:54 +0000 (23:19 +0000)
committerRussell Bryant <russell@russellbryant.com>
Fri, 10 Dec 2004 23:19:54 +0000 (23:19 +0000)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/v1-0@4420 65c4cc65-6c06-0410-ace0-fbb531ad65f3

ast_expr.y

index 43385ae8f4e829d7e6b8f247cb2484a0aac57cec..df08f68299608728487e2e85b3646d1de444058b 100755 (executable)
@@ -651,19 +651,24 @@ struct val *a, *b;
 {
        struct val *r;
 
-       if (!to_integer (a) || !to_integer (b)) {
+       if (!to_integer (a)) {
                ast_log(LOG_WARNING,"non-numeric argument\n");
-               free_value(a);
+               if (!to_integer (b)) {
+                       free_value(a);
+                       free_value(b);
+                       return make_integer(0);
+               } else {
+                       free_value(a);
+                       return (b);
+               }
+       } else if (!to_integer(b)) {
                free_value(b);
-               return(NULL);
+               return (a);
        }
 
        r = make_integer (/*(quad_t)*/(a->u.i + b->u.i));
        if (chk_plus (a->u.i, b->u.i, r->u.i)) {
                ast_log(LOG_WARNING,"overflow\n");
-               free_value(a);
-               free_value(b);
-               return(NULL);
        }
        free_value (a);
        free_value (b);
@@ -691,19 +696,27 @@ struct val *a, *b;
 {
        struct val *r;
 
-       if (!to_integer (a) || !to_integer (b)) {
-               free_value(a);
-               free_value(b);
+       if (!to_integer (a)) {
                ast_log(LOG_WARNING, "non-numeric argument\n");
-               return(NULL);
+               if (!to_integer (b)) {
+                       free_value(a);
+                       free_value(b);
+                       return make_integer(0);
+               } else {
+                       r = make_integer(0 - b->u.i);
+                       free_value(a);
+                       free_value(b);
+                       return (r);
+               }
+       } else if (!to_integer(b)) {
+               ast_log(LOG_WARNING, "non-numeric argument\n");
+               free_value(b);
+               return (a);
        }
 
        r = make_integer (/*(quad_t)*/(a->u.i - b->u.i));
        if (chk_minus (a->u.i, b->u.i, r->u.i)) {
-               free_value(a);
-               free_value(b);
-               ast_log(LOG_WARNING, "overload\n");
-               return(NULL);
+               ast_log(LOG_WARNING, "overflow\n");
        }
        free_value (a);
        free_value (b);
@@ -733,15 +746,12 @@ struct val *a, *b;
                free_value(a);
                free_value(b);
                ast_log(LOG_WARNING, "non-numeric argument\n");
-               return(NULL);
+               return(make_integer(0));
        }
 
        r = make_integer (/*(quad_t)*/(a->u.i * b->u.i));
        if (chk_times (a->u.i, b->u.i, r->u.i)) {
                ast_log(LOG_WARNING, "overflow\n");
-               free_value(a);
-               free_value(b);
-               return(NULL);
        }
        free_value (a);
        free_value (b);
@@ -766,26 +776,28 @@ struct val *a, *b;
 {
        struct val *r;
 
-       if (!to_integer (a) || !to_integer (b)) {
+       if (!to_integer (a)) {
                free_value(a);
                free_value(b);
                ast_log(LOG_WARNING, "non-numeric argument\n");
-               return(NULL);
+               return make_integer(0);
+       } else if (!to_integer (b)) {
+               free_value(a);
+               free_value(b);
+               ast_log(LOG_WARNING, "non-numeric argument\n");
+               return make_integer(INT_MAX);
        }
 
        if (b->u.i == 0) {
                ast_log(LOG_WARNING, "division by zero\n");             
                free_value(a);
                free_value(b);
-               return(NULL);
+               return make_integer(INT_MAX);
        }
 
        r = make_integer (/*(quad_t)*/(a->u.i / b->u.i));
        if (chk_div (a->u.i, b->u.i)) {
                ast_log(LOG_WARNING, "overflow\n");
-               free_value(a);
-               free_value(b);
-               return(NULL);
        }
        free_value (a);
        free_value (b);
@@ -802,14 +814,13 @@ struct val *a, *b;
                ast_log(LOG_WARNING, "non-numeric argument\n");
                free_value(a);
                free_value(b);
-               return(NULL);
+               return make_integer(0);
        }
 
        if (b->u.i == 0) {
                ast_log(LOG_WARNING, "div by zero\n");
                free_value(a);
-               free_value(b);
-               return(NULL);
+               return (b);
        }
 
        r = make_integer (/*(quad_t)*/(a->u.i % b->u.i));
@@ -839,7 +850,7 @@ struct val *a, *b;
                ast_log(LOG_WARNING,"regcomp() error : %s",errbuf);
                free_value(a);
                free_value(b);
-               return(NULL);           
+               return make_str("");            
        }
 
        /* compare string against pattern */