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

Author: Daniel-Constantin Mierla <[email protected]>
Committer: Daniel-Constantin Mierla <[email protected]>
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/e00f610203fee957a22afc5f8103c1482a925138.diff
Patch: 
https://github.com/kamailio/kamailio/commit/e00f610203fee957a22afc5f8103c1482a925138.patch

---

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) {


_______________________________________________
Kamailio (SER) - Development Mailing List
[email protected]
https://lists.kamailio.org/cgi-bin/mailman/listinfo/sr-dev

Reply via email to