Module: kamailio
Branch: 5.3
Commit: a6fa3dee5b1642e3285a1d92c890bff39810e804
URL: 
https://github.com/kamailio/kamailio/commit/a6fa3dee5b1642e3285a1d92c890bff39810e804

Author: Daniel-Constantin Mierla <[email protected]>
Committer: Ovidiu Sas <[email protected]>
Date: 2021-03-16T15:54:45-04:00

mangler: 0-ending value on deconding uri

(cherry picked from commit 3b038ed6761a5818441a7610a8305491aa358377)

---

Modified: src/modules/mangler/contact_ops.c

---

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

---

diff --git a/src/modules/mangler/contact_ops.c 
b/src/modules/mangler/contact_ops.c
index de94edb534..c3e1a2ff2e 100644
--- a/src/modules/mangler/contact_ops.c
+++ b/src/modules/mangler/contact_ops.c
@@ -610,28 +610,28 @@ decode_uri (str* uri, char separator, str * result, str* 
dst_uri)
                {
                        LOG(L_ERR,"ERROR: decode_uri: Unable to decode host 
address \n");
                        return -2;/* should I quit or ignore ? */
-               }                       
+               }
 
        if ((format.password.len > 0) && (format.username.len <= 0))
                {
                        LOG(L_ERR,"ERROR: decode_uri: Password decoded but no 
username available\n");
                        return -3;
                }
-               
+
        /* a complete uri would be 
sip:username:password@ip:port;transport=protocol goes to
         * sip:enc_pref#username#password#ip#port#protocol@public_ip
         */
        result->len = format.first + (uri->len - format.second);        /* not 
NULL terminated */
        if (format.username.len > 0) result->len += format.username.len + 1;    
//: or @
        if (format.password.len > 0) result->len += format.password.len + 1;    
//@
-               
+
        /* if (format.ip.len > 0) */         result->len += format.ip.len;
-               
+
        if (format.port.len > 0)     result->len += 1 + format.port.len;        
//:
        if (format.protocol.len > 0) result->len += 1 + 10 + 
format.protocol.len;       //;transport=
-       
+
        /* adding one comes from * */
-       result->s = pkg_malloc (result->len);
+       result->s = pkg_malloc (result->len + 1); /* NULL termination */
        if (result->s == NULL)
                {
                        LOG(L_ERR,"ERROR: decode_contact: Unable to allocate 
memory\n");
@@ -640,7 +640,7 @@ decode_uri (str* uri, char separator, str * result, str* 
dst_uri)
        pos = result->s;
        memcpy (pos, uri->s, format.first);     /* till sip: */
        pos = pos + format.first;
-       
+
        if (format.username.len > 0)
        {
                memcpy (pos, format.username.s, format.username.len);
@@ -662,7 +662,7 @@ decode_uri (str* uri, char separator, str * result, str* 
dst_uri)
 
                memcpy (pos, format.ip.s, format.ip.len);
                pos = pos + format.ip.len;
-       
+
        if (format.port.len > 0)
        {
                memcpy (pos, ":", 1);
@@ -677,9 +677,11 @@ decode_uri (str* uri, char separator, str * result, str* 
dst_uri)
                memcpy (pos, format.protocol.s, format.protocol.len);
                pos = pos + format.protocol.len;
        }
-       
+
        memcpy (pos, uri->s + format.second, uri->len - format.second); /* till 
end: */
-       
+
+       result->s[result->len] = '\0';
+
        /* dst_uri */
        if (dst_uri && format.rcv_ip.s){
                dst_uri->len=4 /* sip: */ + format.rcv_ip.len;


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

Reply via email to