diff --git a/src/core.c b/src/core.c index a1f2f1d..2e200e9 100644 --- a/src/core.c +++ b/src/core.c @@ -867,10 +867,18 @@ int proxy_getaddrinfo(const char *node, const char *service, (*res)->ai_canonname = addr_name; (*res)->ai_next = NULL; (*res)->ai_family = sockaddr_space->sa_family = AF_INET; - (*res)->ai_socktype = hints->ai_socktype; - (*res)->ai_flags = hints->ai_flags; - (*res)->ai_protocol = hints->ai_protocol; (*res)->ai_addrlen = sizeof(*sockaddr_space); + + if (hints != NULL) { + (*res)->ai_socktype = hints->ai_socktype; + (*res)->ai_flags = hints->ai_flags; + (*res)->ai_protocol = hints->ai_protocol; + } else { + (*res)->ai_socktype = 0; + (*res)->ai_flags = 0; + (*res)->ai_protocol = 0; + } + goto out; err3: free(sockaddr_space); diff --git a/src/libproxychains.c b/src/libproxychains.c index 3ac44a3..3d4d968 100644 --- a/src/libproxychains.c +++ b/src/libproxychains.c @@ -409,8 +409,10 @@ void freeaddrinfo(struct addrinfo *res) if(!proxychains_resolver) true_freeaddrinfo(res); else { - free(res->ai_addr); - free(res); + if (res != NULL) { + free(res->ai_addr); + free(res); + } } return; }