瀏覽代碼

nat_traversal: use local variable for port and proto on keepalive resolve

- safe execution for those resolving functions expecting PROTO_NONE
- reported by Jason Penton, FS#491
Daniel-Constantin Mierla 10 年之前
父節點
當前提交
0bbcbe8328
共有 1 個文件被更改,包括 5 次插入1 次删除
  1. 5 1
      modules/nat_traversal/nat_traversal.c

+ 5 - 1
modules/nat_traversal/nat_traversal.c

@@ -1510,6 +1510,8 @@ send_keepalive(NAT_Contact *contact)
 	struct dest_info dst;
     int nat_port, len;
     str nat_ip;
+	unsigned short lport;
+	char lproto;
 
     if (keepalive_params.from == NULL) {
         if (contact->socket != last_socket) {
@@ -1554,7 +1556,9 @@ send_keepalive(NAT_Contact *contact)
     ptr = strchr(nat_ip.s, ':');
     nat_ip.len = ptr - nat_ip.s;
     nat_port = strtol(ptr+1, NULL, 10);
-    hostent = sip_resolvehost(&nat_ip, NULL, NULL);
+    lport = 0;
+    lproto = PROTO_NONE;
+    hostent = sip_resolvehost(&nat_ip, &lport, &lproto);
     hostent2su(&dst.to, hostent, 0, nat_port);
 	dst.proto=PROTO_UDP;
 	dst.send_sock=contact->socket;