[sr-dev] git:4.3:c4adb485: dispatcher: proper handling of socket parameter when is not last in attrs

Daniel-Constantin Mierla miconda at gmail.com
Thu Dec 17 09:39:34 CET 2015


Module: kamailio
Branch: 4.3
Commit: c4adb485cf19e2961845c0074949126a74de4fd8
URL: https://github.com/kamailio/kamailio/commit/c4adb485cf19e2961845c0074949126a74de4fd8

Author: Daniel-Constantin Mierla <miconda at gmail.com>
Committer: Daniel-Constantin Mierla <miconda at gmail.com>
Date: 2015-12-17T09:37:40+01:00

dispatcher: proper handling of socket parameter when is not last in attrs

- parsing socket function expects a null terminated string

(cherry picked from commit fd79adb4975fc0799fe8488d1dd1a771041a0939)

---

Modified: modules/dispatcher/dispatch.c

---

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

---

diff --git a/modules/dispatcher/dispatch.c b/modules/dispatcher/dispatch.c
index a5f8a2a..a0582b6 100644
--- a/modules/dispatcher/dispatch.c
+++ b/modules/dispatcher/dispatch.c
@@ -241,6 +241,7 @@ int add_dest2list(int id, str uri, int flags, int priority, str *attrs,
 	int orig_id = 0, orig_nr = 0;
 	str host;
 	int port, proto;
+	char c = 0;
 	ds_set_t *orig_ds_lists = ds_lists[list_idx];
 
 	/* check uri */
@@ -315,11 +316,23 @@ int add_dest2list(int id, str uri, int flags, int priority, str *attrs,
 
 	/* check socket attribute */
 	if (dp->attrs.socket.s && dp->attrs.socket.len > 0) {
+		/* parse_phostport(...) expects 0-terminated string
+		 * - after socket parameter is either ';' or '\0' */
+		if(dp->attrs.socket.s[dp->attrs.socket.len]!='\0') {
+			c = dp->attrs.socket.s[dp->attrs.socket.len];
+			dp->attrs.socket.s[dp->attrs.socket.len] = '\0';
+		}
 		if (parse_phostport(dp->attrs.socket.s, &host.s, &host.len,
 				&port, &proto)!=0) {
 			LM_ERR("bad socket <%.*s>\n", dp->attrs.socket.len, dp->attrs.socket.s);
+			if(c!=0) {
+				dp->attrs.socket.s[dp->attrs.socket.len] = c;
+			}
 			goto err;
 		}
+		if(c!=0) {
+			dp->attrs.socket.s[dp->attrs.socket.len] = c;
+		}
 		dp->sock = grep_sock_info( &host, (unsigned short)port, proto);
 		if (dp->sock==0) {
 			LM_ERR("non-local socket <%.*s>\n", dp->attrs.socket.len, dp->attrs.socket.s);




More information about the sr-dev mailing list