Browse Source

- eval_expr too many expressions bug (reported by Michal), fixed by removing the expr. recursions checks (they were a parser debugging remainder, you can't
have expr. loops without having actions loops and the actions loops are
already handled).
Closes SER-91.

Andrei Pelinescu-Onciul 19 years ago
parent
commit
d2f9352e81
1 changed files with 2 additions and 13 deletions
  1. 2 13
      route.c

+ 2 - 13
route.c

@@ -42,6 +42,7 @@
  *  2004-10-19  added from_uri & to_uri (andrei)
  *  2004-10-19  added from_uri & to_uri (andrei)
  *  2005-12-12  added retcode support (anrei)
  *  2005-12-12  added retcode support (anrei)
  *  2005-12-19  select framework (mma)
  *  2005-12-19  select framework (mma)
+ *  2006-01-30 removed rec. protection from eval_expr (andrei)
  */
  */
 
 
 
 
@@ -701,7 +702,7 @@ error_op:
 
 
 
 
 /* returns: 0/1 (false/true) or -1 on error */
 /* returns: 0/1 (false/true) or -1 on error */
-static int eval_elem(struct expr* e, struct sip_msg* msg)
+inline static int eval_elem(struct expr* e, struct sip_msg* msg)
 {
 {
 	struct sip_uri uri;
 	struct sip_uri uri;
 	int ret;
 	int ret;
@@ -917,17 +918,8 @@ error:
 /* ret= 0/1 (true/false) ,  -1 on error */
 /* ret= 0/1 (true/false) ,  -1 on error */
 int eval_expr(struct expr* e, struct sip_msg* msg)
 int eval_expr(struct expr* e, struct sip_msg* msg)
 {
 {
-	static int rec_lev=0;
 	int ret;
 	int ret;
 
 
-	rec_lev++;
-	if (rec_lev>MAX_REC_LEV){
-		LOG(L_CRIT, "ERROR: eval_expr: too many expressions (%d)\n",
-				rec_lev);
-		ret=-1;
-		goto skip;
-	}
-
 	if (e->type==ELEM_T){
 	if (e->type==ELEM_T){
 		ret=eval_elem(e, msg);
 		ret=eval_elem(e, msg);
 	}else if (e->type==EXP_T){
 	}else if (e->type==EXP_T){
@@ -957,9 +949,6 @@ int eval_expr(struct expr* e, struct sip_msg* msg)
 		LOG(L_CRIT, "BUG: eval_expr: unknown type %d\n", e->type);
 		LOG(L_CRIT, "BUG: eval_expr: unknown type %d\n", e->type);
 		ret=-1;
 		ret=-1;
 	}
 	}
-
-skip:
-	rec_lev--;
 	return ret;
 	return ret;
 }
 }