[tor-commits] [torsocks/master] Fix: fd leak on tor resolve error

dgoulet at torproject.org dgoulet at torproject.org
Fri Apr 4 22:40:27 UTC 2014


commit 11152e145f989bb063ad9efdf988e03396fd0b4c
Author: David Goulet <dgoulet at ev0ke.net>
Date:   Mon Feb 10 22:46:06 2014 -0500

    Fix: fd leak on tor resolve error
    
    Signed-off-by: David Goulet <dgoulet at ev0ke.net>
---
 src/lib/torsocks.c |   21 ++++++++++-----------
 1 file changed, 10 insertions(+), 11 deletions(-)

diff --git a/src/lib/torsocks.c b/src/lib/torsocks.c
index bcf06a1..b98e0ed 100644
--- a/src/lib/torsocks.c
+++ b/src/lib/torsocks.c
@@ -402,25 +402,24 @@ int tsocks_tor_resolve(const char *hostname, uint32_t *ip_addr)
 
 	ret = setup_tor_connection(&conn);
 	if (ret < 0) {
-		goto error;
+		goto end_close;
 	}
 
 	ret = socks5_send_resolve_request(hostname, &conn);
 	if (ret < 0) {
-		goto error;
+		goto end_close;
 	}
 
 	/* Force IPv4 resolution for now. */
 	ret = socks5_recv_resolve_reply(&conn, ip_addr, sizeof(uint32_t));
 	if (ret < 0) {
-		goto error;
+		goto end_close;
 	}
 
-	ret = tsocks_libc_close(conn.fd);
-	if (ret < 0) {
+end_close:
+	if (tsocks_libc_close(conn.fd) < 0) {
 		PERROR("close");
 	}
-
 end:
 error:
 	return ret;
@@ -451,22 +450,22 @@ int tsocks_tor_resolve_ptr(const char *addr, char **ip, int af)
 
 	ret = setup_tor_connection(&conn);
 	if (ret < 0) {
-		goto error;
+		goto end_close;
 	}
 
 	ret = socks5_send_resolve_ptr_request(addr, &conn);
 	if (ret < 0) {
-		goto error;
+		goto end_close;
 	}
 
 	/* Force IPv4 resolution for now. */
 	ret = socks5_recv_resolve_ptr_reply(&conn, ip);
 	if (ret < 0) {
-		goto error;
+		goto end_close;
 	}
 
-	ret = tsocks_libc_close(conn.fd);
-	if (ret < 0) {
+end_close:
+	if (tsocks_libc_close(conn.fd) < 0) {
 		PERROR("close");
 	}
 





More information about the tor-commits mailing list