diff options
author | markster <markster@f38db490-d61c-443f-a65b-d21fe96a405b> | 2004-12-10 23:01:48 +0000 |
---|---|---|
committer | markster <markster@f38db490-d61c-443f-a65b-d21fe96a405b> | 2004-12-10 23:01:48 +0000 |
commit | 110963f6ff6df0ccae31587f247a5c7be4053fc0 (patch) | |
tree | 2e89ee9ef4b6357eed005e7f2fcc5e2af3fc9184 /ast_expr.y | |
parent | 940085ffcbf5711b9aa61c616c32f1214e585080 (diff) |
Fix setvar issue (bug #3010)
git-svn-id: http://svn.digium.com/svn/asterisk/trunk@4419 f38db490-d61c-443f-a65b-d21fe96a405b
Diffstat (limited to 'ast_expr.y')
-rwxr-xr-x | ast_expr.y | 67 |
1 files changed, 39 insertions, 28 deletions
diff --git a/ast_expr.y b/ast_expr.y index 43385ae8f..df08f6829 100755 --- a/ast_expr.y +++ b/ast_expr.y @@ -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 */ |