Module: kamailio
Branch: master
Commit: e00f610203fee957a22afc5f8103c1482a925138
URL:
https://github.com/kamailio/kamailio/commit/e00f610203fee957a22afc5f8103c14…
Author: Daniel-Constantin Mierla <miconda(a)gmail.com>
Committer: Daniel-Constantin Mierla <miconda(a)gmail.com>
Date: 2020-12-10T16:41:18+01:00
dispatcher: check weight value to be in expected range
---
Modified: src/modules/dispatcher/dispatch.c
---
Diff:
https://github.com/kamailio/kamailio/commit/e00f610203fee957a22afc5f8103c14…
Patch:
https://github.com/kamailio/kamailio/commit/e00f610203fee957a22afc5f8103c14…
---
diff --git a/src/modules/dispatcher/dispatch.c b/src/modules/dispatcher/dispatch.c
index e52ffdeae8..c1f4dbfd8f 100644
--- a/src/modules/dispatcher/dispatch.c
+++ b/src/modules/dispatcher/dispatch.c
@@ -284,7 +284,7 @@ int ds_set_attrs(ds_dest_t *dest, str *vattrs)
param_hooks_t phooks;
param_t *pit = NULL;
str param;
- int tmp_rweight = 0;
+ int tmp_ival = 0;
str sattrs;
if(vattrs == NULL || vattrs->len <= 0) {
@@ -319,7 +319,15 @@ int ds_set_attrs(ds_dest_t *dest, str *vattrs)
str2sint(&pit->body, &dest->attrs.congestion_control);
} else if(pit->name.len == 6
&& strncasecmp(pit->name.s, "weight", 6) == 0) {
- str2sint(&pit->body, &dest->attrs.weight);
+ tmp_ival = 0;
+ str2sint(&pit->body, &tmp_ival);
+ if(tmp_ival >= 1 && tmp_ival <= 100) {
+ dest->attrs.weight = tmp_ival;
+ } else {
+ dest->attrs.weight = 0;
+ LM_ERR("weight %d not in 1-100 range - ignoring destination",
+ tmp_ival);
+ }
} else if(pit->name.len == 7
&& strncasecmp(pit->name.s, "latency", 7) == 0) {
int initial_latency = 0;
@@ -336,12 +344,13 @@ int ds_set_attrs(ds_dest_t *dest, str *vattrs)
dest->attrs.sockname = pit->body;
} else if(pit->name.len == 7
&& strncasecmp(pit->name.s, "rweight", 7) == 0) {
- tmp_rweight = 0;
- str2sint(&pit->body, &tmp_rweight);
- if(tmp_rweight >= 1 && tmp_rweight <= 100) {
- dest->attrs.rweight = tmp_rweight;
+ tmp_ival = 0;
+ str2sint(&pit->body, &tmp_ival);
+ if(tmp_ival >= 1 && tmp_ival <= 100) {
+ dest->attrs.rweight = tmp_ival;
} else {
- LM_ERR("rweight %d not in 1-100 range; skipped", tmp_rweight);
+ dest->attrs.rweight = 0;
+ LM_WARN("rweight %d not in 1-100 range - ignoring", tmp_ival);
}
} else if(pit->name.len == 9
&& strncasecmp(pit->name.s, "ping_from", 9) == 0) {