From e47d1e5623f7b21607cbaca3b534336be3605d42 Mon Sep 17 00:00:00 2001 From: djm <> Date: Fri, 30 Jan 2009 03:58:35 +0000 Subject: missing ssl_sock_init() call in init_client() (used by "openssl s_client"), fix an unlikely memory leak --- src/lib/libssl/src/apps/s_socket.c | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) (limited to 'src') diff --git a/src/lib/libssl/src/apps/s_socket.c b/src/lib/libssl/src/apps/s_socket.c index 7e47d5118d..a91f5df919 100644 --- a/src/lib/libssl/src/apps/s_socket.c +++ b/src/lib/libssl/src/apps/s_socket.c @@ -231,16 +231,23 @@ int init_client(int *sock, char *host, char *port, int type, int af) struct addrinfo hints, *ai_top, *ai; int i, s; + if (!ssl_sock_init()) return(0); + memset(&hints, '\0', sizeof(hints)); hints.ai_family = af; hints.ai_socktype = type; - if ((i = getaddrinfo(host, port, &hints, &ai_top)) != 0 || - ai_top == NULL || ai_top->ai_addr == NULL) + if ((i = getaddrinfo(host, port, &hints, &ai_top)) != 0) { BIO_printf(bio_err,"getaddrinfo: %s\n", gai_strerror(i)); return (0); } + if (ai_top == NULL || ai_top->ai_addr == NULL) + { + BIO_printf(bio_err,"getaddrinfo returned no addresses\n"); + if (ai_top != NULL) { freeaddrinfo(ai_top); } + return (0); + } for (ai = ai_top; ai != NULL; ai = ai->ai_next) { @@ -255,7 +262,7 @@ int init_client(int *sock, char *host, char *port, int type, int af) } #endif if ((i = connect(s, ai->ai_addr, ai->ai_addrlen)) == 0) - { *sock=s; freeaddrinfo(ai_top); return (1);} + { *sock=s; freeaddrinfo(ai_top); return (1); } close(s); } -- cgit v1.2.3-55-g6feb