Loading lib/ftp.c +5 −6 Original line number Diff line number Diff line Loading @@ -906,7 +906,8 @@ CURLcode ftp_use_port(struct connectdata *conn) 2.1.X doesn't do*/ hints.ai_socktype = SOCK_STREAM; hints.ai_flags = AI_PASSIVE; if (getaddrinfo(hbuf, "0", &hints, &res)) if (getaddrinfo(hbuf, (char *)"0", &hints, &res)) return CURLE_FTP_PORT_FAILED; portsock = -1; Loading @@ -929,16 +930,15 @@ CURLcode ftp_use_port(struct connectdata *conn) break; } freeaddrinfo(res); if (portsock < 0) { failf(data, strerror(errno)); freeaddrinfo(res); return CURLE_FTP_PORT_FAILED; } sslen = sizeof(ss); if (getsockname(portsock, sa, &sslen) < 0) { failf(data, strerror(errno)); freeaddrinfo(res); return CURLE_FTP_PORT_FAILED; } Loading Loading @@ -1047,7 +1047,6 @@ CURLcode ftp_use_port(struct connectdata *conn) if (!*modep) { sclose(portsock); freeaddrinfo(res); return CURLE_FTP_PORT_FAILED; } /* we set the secondary socket variable to this for now, it Loading Loading @@ -1134,7 +1133,7 @@ CURLcode ftp_use_port(struct connectdata *conn) } if(hostdataptr) /* free the memory used for name lookup */ free(hostdataptr); Curl_freeaddrinfo(hostdataptr); } else { failf(data, "could't find my own IP address (%s)", myhost); Loading Loading @@ -1285,7 +1284,7 @@ CURLcode ftp_use_pasv(struct connectdata *conn) ftp_pasv_verbose(conn, conninfo, newhost, connectport); if(hostdataptr) free(hostdataptr); Curl_freeaddrinfo(hostdataptr); if(CURLE_OK != result) return result; Loading lib/hostip.c +56 −4 Original line number Diff line number Diff line Loading @@ -5,7 +5,7 @@ * | (__| |_| | _ <| |___ * \___|\___/|_| \_\_____| * * Copyright (C) 2000, Daniel Stenberg, <daniel@haxx.se>, et al. * Copyright (C) 2001, Daniel Stenberg, <daniel@haxx.se>, et al. * * In order to be useful for every potential user, curl and libcurl are * dual-licensed under the MPL and the MIT/X-derivate licenses. Loading Loading @@ -69,6 +69,58 @@ /* --- resolve name or IP-number --- */ #ifdef ENABLE_IPV6 #ifdef MALLOCDEBUG /* These two are strictly for memory tracing and are using the same * style as the family otherwise present in memdebug.c. I put these ones * here since they require a bunch of struct types I didn't wanna include * in memdebug.c */ int curl_getaddrinfo(char *hostname, char *service, struct addrinfo *hints, struct addrinfo **result, int line, const char *source) { int res=(getaddrinfo)(hostname, service, hints, result); if(0 == res) /* success */ fprintf(logfile?logfile:stderr, "ADDR %s:%d getaddrinfo() = %p\n", source, line, *result); else fprintf(logfile?logfile:stderr, "ADDR %s:%d getaddrinfo() failed\n", source, line); return res; } void curl_freeaddrinfo(struct addrinfo *freethis, int line, const char *source) { (freeaddrinfo)(freethis); fprintf(logfile?logfile:stderr, "ADDR %s:%d freeaddrinfo(%p)\n", source, line, freethis); } #endif /* * This is a wrapper function for freeing name information in a protocol * independent way. This takes care of using the appropriate underlaying * proper function. */ void Curl_freeaddrinfo(void *freethis) { #ifdef ENABLE_IPV6 freeaddrinfo(freethis); #else free(freethis); #endif } /* * Return name information about the given hostname and port number. If * successful, the 'addrinfo' is returned and the forth argument will point to * memory we need to free after use. That meory *MUST* be freed with * Curl_freeaddrinfo(), nothing else. */ Curl_addrinfo *Curl_getaddrinfo(struct SessionHandle *data, char *hostname, int port, Loading @@ -78,8 +130,6 @@ Curl_addrinfo *Curl_getaddrinfo(struct SessionHandle *data, int error; char sbuf[NI_MAXSERV]; *bufp=NULL; /* pointer unused with IPv6 */ memset(&hints, 0, sizeof(hints)); hints.ai_family = PF_UNSPEC; hints.ai_socktype = SOCK_STREAM; Loading @@ -90,6 +140,8 @@ Curl_addrinfo *Curl_getaddrinfo(struct SessionHandle *data, infof(data, "getaddrinfo(3) failed for %s\n", hostname); return NULL; } *bufp=(char *)res; /* make it point to the result struct */ return res; } #else /* following code is IPv4-only */ Loading lib/hostip.h +12 −0 Original line number Diff line number Diff line Loading @@ -27,9 +27,21 @@ struct addrinfo; struct hostent; struct SessionHandle; /* Get name info */ Curl_addrinfo *Curl_getaddrinfo(struct SessionHandle *data, char *hostname, int port, char **bufp); /* free name info */ void Curl_freeaddrinfo(void *freethis); #ifdef MALLOCDEBUG void curl_freeaddrinfo(struct addrinfo *freethis, int line, const char *source); int curl_getaddrinfo(char *hostname, char *service, struct addrinfo *hints, struct addrinfo **result, int line, const char *source); #endif #endif lib/memdebug.h +7 −0 Original line number Diff line number Diff line Loading @@ -6,6 +6,8 @@ #include <memory.h> #endif extern FILE *logfile; /* memory functions */ void *curl_domalloc(size_t size, int line, const char *source); void *curl_dorealloc(void *ptr, size_t size, int line, const char *source); Loading Loading @@ -35,6 +37,11 @@ int curl_fclose(FILE *file, int line, const char *source); #define accept(sock,addr,len)\ curl_accept(sock,addr,len,__LINE__,__FILE__) #define getaddrinfo(host,serv,hint,res) \ curl_getaddrinfo(host,serv,hint,res,__LINE__,__FILE__) #define freeaddrinfo(data) \ curl_freeaddrinfo(data,__LINE__,__FILE__) /* sclose is probably already defined, redefine it! */ #undef sclose #define sclose(sockfd) curl_sclose(sockfd,__LINE__,__FILE__) Loading lib/url.c +1 −6 Original line number Diff line number Diff line Loading @@ -879,13 +879,8 @@ CURLcode Curl_disconnect(struct connectdata *conn) if(conn->proto.generic) free(conn->proto.generic); #ifdef ENABLE_IPV6 if(conn->hostaddr) /* host name info */ freeaddrinfo(conn->hostaddr); #else if(conn->hostent_buf) /* host name info */ free(conn->hostent_buf); #endif Curl_freeaddrinfo(conn->hostent_buf); if(conn->newurl) free(conn->newurl); Loading Loading
lib/ftp.c +5 −6 Original line number Diff line number Diff line Loading @@ -906,7 +906,8 @@ CURLcode ftp_use_port(struct connectdata *conn) 2.1.X doesn't do*/ hints.ai_socktype = SOCK_STREAM; hints.ai_flags = AI_PASSIVE; if (getaddrinfo(hbuf, "0", &hints, &res)) if (getaddrinfo(hbuf, (char *)"0", &hints, &res)) return CURLE_FTP_PORT_FAILED; portsock = -1; Loading @@ -929,16 +930,15 @@ CURLcode ftp_use_port(struct connectdata *conn) break; } freeaddrinfo(res); if (portsock < 0) { failf(data, strerror(errno)); freeaddrinfo(res); return CURLE_FTP_PORT_FAILED; } sslen = sizeof(ss); if (getsockname(portsock, sa, &sslen) < 0) { failf(data, strerror(errno)); freeaddrinfo(res); return CURLE_FTP_PORT_FAILED; } Loading Loading @@ -1047,7 +1047,6 @@ CURLcode ftp_use_port(struct connectdata *conn) if (!*modep) { sclose(portsock); freeaddrinfo(res); return CURLE_FTP_PORT_FAILED; } /* we set the secondary socket variable to this for now, it Loading Loading @@ -1134,7 +1133,7 @@ CURLcode ftp_use_port(struct connectdata *conn) } if(hostdataptr) /* free the memory used for name lookup */ free(hostdataptr); Curl_freeaddrinfo(hostdataptr); } else { failf(data, "could't find my own IP address (%s)", myhost); Loading Loading @@ -1285,7 +1284,7 @@ CURLcode ftp_use_pasv(struct connectdata *conn) ftp_pasv_verbose(conn, conninfo, newhost, connectport); if(hostdataptr) free(hostdataptr); Curl_freeaddrinfo(hostdataptr); if(CURLE_OK != result) return result; Loading
lib/hostip.c +56 −4 Original line number Diff line number Diff line Loading @@ -5,7 +5,7 @@ * | (__| |_| | _ <| |___ * \___|\___/|_| \_\_____| * * Copyright (C) 2000, Daniel Stenberg, <daniel@haxx.se>, et al. * Copyright (C) 2001, Daniel Stenberg, <daniel@haxx.se>, et al. * * In order to be useful for every potential user, curl and libcurl are * dual-licensed under the MPL and the MIT/X-derivate licenses. Loading Loading @@ -69,6 +69,58 @@ /* --- resolve name or IP-number --- */ #ifdef ENABLE_IPV6 #ifdef MALLOCDEBUG /* These two are strictly for memory tracing and are using the same * style as the family otherwise present in memdebug.c. I put these ones * here since they require a bunch of struct types I didn't wanna include * in memdebug.c */ int curl_getaddrinfo(char *hostname, char *service, struct addrinfo *hints, struct addrinfo **result, int line, const char *source) { int res=(getaddrinfo)(hostname, service, hints, result); if(0 == res) /* success */ fprintf(logfile?logfile:stderr, "ADDR %s:%d getaddrinfo() = %p\n", source, line, *result); else fprintf(logfile?logfile:stderr, "ADDR %s:%d getaddrinfo() failed\n", source, line); return res; } void curl_freeaddrinfo(struct addrinfo *freethis, int line, const char *source) { (freeaddrinfo)(freethis); fprintf(logfile?logfile:stderr, "ADDR %s:%d freeaddrinfo(%p)\n", source, line, freethis); } #endif /* * This is a wrapper function for freeing name information in a protocol * independent way. This takes care of using the appropriate underlaying * proper function. */ void Curl_freeaddrinfo(void *freethis) { #ifdef ENABLE_IPV6 freeaddrinfo(freethis); #else free(freethis); #endif } /* * Return name information about the given hostname and port number. If * successful, the 'addrinfo' is returned and the forth argument will point to * memory we need to free after use. That meory *MUST* be freed with * Curl_freeaddrinfo(), nothing else. */ Curl_addrinfo *Curl_getaddrinfo(struct SessionHandle *data, char *hostname, int port, Loading @@ -78,8 +130,6 @@ Curl_addrinfo *Curl_getaddrinfo(struct SessionHandle *data, int error; char sbuf[NI_MAXSERV]; *bufp=NULL; /* pointer unused with IPv6 */ memset(&hints, 0, sizeof(hints)); hints.ai_family = PF_UNSPEC; hints.ai_socktype = SOCK_STREAM; Loading @@ -90,6 +140,8 @@ Curl_addrinfo *Curl_getaddrinfo(struct SessionHandle *data, infof(data, "getaddrinfo(3) failed for %s\n", hostname); return NULL; } *bufp=(char *)res; /* make it point to the result struct */ return res; } #else /* following code is IPv4-only */ Loading
lib/hostip.h +12 −0 Original line number Diff line number Diff line Loading @@ -27,9 +27,21 @@ struct addrinfo; struct hostent; struct SessionHandle; /* Get name info */ Curl_addrinfo *Curl_getaddrinfo(struct SessionHandle *data, char *hostname, int port, char **bufp); /* free name info */ void Curl_freeaddrinfo(void *freethis); #ifdef MALLOCDEBUG void curl_freeaddrinfo(struct addrinfo *freethis, int line, const char *source); int curl_getaddrinfo(char *hostname, char *service, struct addrinfo *hints, struct addrinfo **result, int line, const char *source); #endif #endif
lib/memdebug.h +7 −0 Original line number Diff line number Diff line Loading @@ -6,6 +6,8 @@ #include <memory.h> #endif extern FILE *logfile; /* memory functions */ void *curl_domalloc(size_t size, int line, const char *source); void *curl_dorealloc(void *ptr, size_t size, int line, const char *source); Loading Loading @@ -35,6 +37,11 @@ int curl_fclose(FILE *file, int line, const char *source); #define accept(sock,addr,len)\ curl_accept(sock,addr,len,__LINE__,__FILE__) #define getaddrinfo(host,serv,hint,res) \ curl_getaddrinfo(host,serv,hint,res,__LINE__,__FILE__) #define freeaddrinfo(data) \ curl_freeaddrinfo(data,__LINE__,__FILE__) /* sclose is probably already defined, redefine it! */ #undef sclose #define sclose(sockfd) curl_sclose(sockfd,__LINE__,__FILE__) Loading
lib/url.c +1 −6 Original line number Diff line number Diff line Loading @@ -879,13 +879,8 @@ CURLcode Curl_disconnect(struct connectdata *conn) if(conn->proto.generic) free(conn->proto.generic); #ifdef ENABLE_IPV6 if(conn->hostaddr) /* host name info */ freeaddrinfo(conn->hostaddr); #else if(conn->hostent_buf) /* host name info */ free(conn->hostent_buf); #endif Curl_freeaddrinfo(conn->hostent_buf); if(conn->newurl) free(conn->newurl); Loading