From fd79adb4975fc0799fe8488d1dd1a771041a0939 Mon Sep 17 00:00:00 2001 From: Daniel-Constantin Mierla Date: Thu, 10 Dec 2015 09:33:32 +0100 Subject: [PATCH] dispatcher: proper handling of socket parameter when is not last in attrs - parsing socket function expects a null terminated string --- modules/dispatcher/dispatch.c | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/modules/dispatcher/dispatch.c b/modules/dispatcher/dispatch.c index 1188692290c..3638a9c8f8a 100644 --- a/modules/dispatcher/dispatch.c +++ b/modules/dispatcher/dispatch.c @@ -255,6 +255,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 */ @@ -329,11 +330,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);