[sr-dev] git:master:aff1dcd3: core: safety checks on proto variable for dsn resolving

Daniel-Constantin Mierla miconda at gmail.com
Mon Dec 22 21:43:23 CET 2014


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

Author: Daniel-Constantin Mierla <miconda at gmail.com>
Committer: Daniel-Constantin Mierla <miconda at gmail.com>
Date: 2014-12-22T21:41:53+01:00

core: safety checks on proto variable for dsn resolving

- avoid crashes if functions used inadequately with a null pointer

---

Modified: dns_cache.c
Modified: msg_translator.c

---

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

---

diff --git a/dns_cache.c b/dns_cache.c
index 285c6ad..2e963a8 100644
--- a/dns_cache.c
+++ b/dns_cache.c
@@ -2808,7 +2808,11 @@ struct hostent* dns_naptr_sip_resolvehost(str* name, unsigned short* port,
 	char origproto;
 	str srv_name;
 
-	origproto=*proto;
+	if(proto) {
+		origproto=*proto;
+	} else {
+		origproto=PROTO_NONE;
+	}
 	he=0;
 	if (dns_hash==0){ /* not init => use normal, non-cached version */
 		LM_WARN("called before dns cache initialization\n");
@@ -2848,7 +2852,7 @@ struct hostent* dns_naptr_sip_resolvehost(str* name, unsigned short* port,
 		dns_hash_put(e);
 	}
 naptr_not_found:
-	*proto = origproto;
+	if(proto) *proto = origproto;
 	he = no_naptr_srv_sip_resolvehost(name,port,proto);
 	/* fallback all the way down to A/AAAA */
 	if (he==0) {
diff --git a/msg_translator.c b/msg_translator.c
index df1a753..8bca35f 100644
--- a/msg_translator.c
+++ b/msg_translator.c
@@ -197,6 +197,7 @@ static int check_via_address(struct ip_addr* ip, str *name,
 	int i;
 	char* s;
 	int len;
+	char lproto;
 
 	/* maybe we are lucky and name it's an ip */
 	s=ip_addr2a(ip);
@@ -229,7 +230,8 @@ static int check_via_address(struct ip_addr* ip, str *name,
 	if (resolver&DO_DNS){
 		DBG("check_via_address: doing dns lookup\n");
 		/* try all names ips */
-		he=sip_resolvehost(name, &port, 0); /* don't use naptr */
+		lproto = PROTO_NONE;
+		he=sip_resolvehost(name, &port, &lproto); /* don't use naptr */
 		if (he && ip->af==he->h_addrtype){
 			for(i=0;he && he->h_addr_list[i];i++){
 				if ( memcmp(&he->h_addr_list[i], ip->u.addr, ip->len)==0)




More information about the sr-dev mailing list