[Asterisk-cvs] asterisk ast_expr.y,1.8.2.2,1.8.2.3

russell at lists.digium.com russell at lists.digium.com
Fri Dec 10 18:22:31 CST 2004


Update of /usr/cvsroot/asterisk
In directory mongoose.digium.com:/tmp/cvs-serv18168

Modified Files:
      Tag: v1-0
	ast_expr.y 
Log Message:
Fix setvar issue (bug #3010)


Index: ast_expr.y
===================================================================
RCS file: /usr/cvsroot/asterisk/ast_expr.y,v
retrieving revision 1.8.2.2
retrieving revision 1.8.2.3
diff -u -d -r1.8.2.2 -r1.8.2.3
--- ast_expr.y	8 Dec 2004 14:42:44 -0000	1.8.2.2
+++ ast_expr.y	10 Dec 2004 23:19:54 -0000	1.8.2.3
@@ -651,19 +651,24 @@
 {
 	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 *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 @@
 		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 *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 @@
 		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 @@
 		ast_log(LOG_WARNING,"regcomp() error : %s",errbuf);
 		free_value(a);
 		free_value(b);
-		return(NULL);		
+		return make_str("");		
 	}
 
 	/* compare string against pattern */




More information about the svn-commits mailing list