[sr-dev] git:master:4763773e: dialplan: skip check subexpressions on expressions with pvs

Victor Seva linuxmaniac at torreviejawireless.org
Wed Jan 14 11:30:53 CET 2015


Module: kamailio
Branch: master
Commit: 4763773eddf5e0e5ea4ae35ee6c2002e05f8bd9d
URL: https://github.com/kamailio/kamailio/commit/4763773eddf5e0e5ea4ae35ee6c2002e05f8bd9d

Author: Victor Seva <linuxmaniac at torreviejawireless.org>
Committer: Victor Seva <linuxmaniac at torreviejawireless.org>
Date: 2015-01-14T11:29:51+01:00

dialplan: skip check subexpressions on expressions with pvs

---

Modified: modules/dialplan/dp_db.c
Modified: modules/dialplan/dp_repl.c

---

Diff:  https://github.com/kamailio/kamailio/commit/4763773eddf5e0e5ea4ae35ee6c2002e05f8bd9d.diff
Patch: https://github.com/kamailio/kamailio/commit/4763773eddf5e0e5ea4ae35ee6c2002e05f8bd9d.patch

---

diff --git a/modules/dialplan/dp_db.c b/modules/dialplan/dp_db.c
index 57b0e76..c1c421d 100644
--- a/modules/dialplan/dp_db.c
+++ b/modules/dialplan/dp_db.c
@@ -494,8 +494,10 @@ dpl_node_t * build_rule(db_val_t * values)
 	LM_DBG("building rule for [%d:%.*s/%.*s/%.*s]\n", matchop,
 			match_exp.len, ZSW(match_exp.s), subst_exp.len, ZSW(subst_exp.s),
 			repl_exp.len, ZSW(repl_exp.s));
-	if (repl_comp && (cap_cnt < repl_comp->max_pmatch) && 
-			(repl_comp->max_pmatch != 0)) {
+	if (!(tflags&(DP_TFLAGS_PV_SUBST|DP_TFLAGS_PV_MATCH)) &&
+		repl_comp && (cap_cnt < repl_comp->max_pmatch) &&
+		(repl_comp->max_pmatch != 0))
+	{
 		LM_ERR("repl_exp %.*s refers to %d sub-expressions, but "
 				"subst_exp %.*s has only %d\n",
 				repl_exp.len, repl_exp.s, repl_comp->max_pmatch,
diff --git a/modules/dialplan/dp_repl.c b/modules/dialplan/dp_repl.c
index ee94be8..1e96ecf 100644
--- a/modules/dialplan/dp_repl.c
+++ b/modules/dialplan/dp_repl.c
@@ -188,7 +188,13 @@ int rule_translate(sip_msg_t *msg, str string, dpl_node_t * rule,
 	}
 
 	if(rule->tflags&DP_TFLAGS_PV_SUBST) {
-		subst_comp = dpl_dynamic_pcre(msg, &rule->subst_exp, NULL);
+		subst_comp = dpl_dynamic_pcre(msg, &rule->subst_exp, &cap_cnt);
+		if (cap_cnt > MAX_REPLACE_WITH) {
+			LM_ERR("subst expression %.*s has too many sub-expressions\n",
+				rule->subst_exp.len, rule->subst_exp.s);
+			if(subst_comp) pcre_free(subst_comp);
+			return -1;
+		}
 	} else {
 		subst_comp = rule->subst_comp;
 	}




More information about the sr-dev mailing list