Ver Fonte

siptrace: avoid creating proxy structure twice in trace_send_duplicate()

- can happen when dst parameter is given, resulting in mem leak
- related to GH #1040
Daniel-Constantin Mierla há 8 anos atrás
pai
commit
8cd0f0be8b
1 ficheiros alterados com 11 adições e 11 exclusões
  1. 11 11
      src/modules/siptrace/siptrace.c

+ 11 - 11
src/modules/siptrace/siptrace.c

@@ -1619,19 +1619,9 @@ static int trace_send_duplicate(char *buf, int len, struct dest_info *dst2)
 		return 0;
 
 	init_dest_info(&dst);
-	/* create a temporary proxy*/
-	dst.proto = PROTO_UDP;
-	p=mk_proxy(&dup_uri->host, (dup_uri->port_no)?dup_uri->port_no:SIP_PORT,
-			dst.proto);
-	if (p==0)
-	{
-		LM_ERR("bad host name in uri\n");
-		return -1;
-	}
 
 	if (!dst2){
-		init_dest_info(&dst);
-		/* create a temporary proxy*/
+		/* create a temporary proxy from dst param */
 		dst.proto = PROTO_UDP;
 		p=mk_proxy(&dup_uri->host, (dup_uri->port_no)?dup_uri->port_no:SIP_PORT,
 				dst.proto);
@@ -1647,6 +1637,16 @@ static int trace_send_duplicate(char *buf, int len, struct dest_info *dst2)
 					" listening socket\n", dst.to.s.sa_family, dst.proto);
 			goto error;
 		}
+	} else {
+		/* create a temporary proxy to dup uri */
+		dst.proto = PROTO_UDP;
+		p=mk_proxy(&dup_uri->host, (dup_uri->port_no)?dup_uri->port_no:SIP_PORT,
+				dst.proto);
+		if (p==0)
+		{
+			LM_ERR("bad host name in uri\n");
+			return -1;
+		}
 	}
 
 	if (msg_send((dst2)?dst2:&dst, buf, len)<0)