Fix verbosconnect() when ipv6-enabled to not assume that conn->serv_addr
is a valid pointer, but instead always depend on the passed-in dns pointer. This happens to be NULL when the connection is re-used...
This commit is contained in:
Родитель
8415b4a271
Коммит
39926181ea
34
lib/url.c
34
lib/url.c
|
@ -1849,26 +1849,36 @@ static void verboseconnect(struct connectdata *conn,
|
|||
|
||||
/* Figure out the ip-number and display the first host name it shows: */
|
||||
#ifdef ENABLE_IPV6
|
||||
(void)dns; /* not used in the IPv6 enabled version */
|
||||
{
|
||||
char hbuf[NI_MAXHOST];
|
||||
#ifdef NI_WITHSCOPEID
|
||||
const int niflags = NI_NUMERICHOST | NI_WITHSCOPEID;
|
||||
#define NIFLAGS NI_NUMERICHOST | NI_WITHSCOPEID
|
||||
#else
|
||||
const int niflags = NI_NUMERICHOST;
|
||||
#define NIFLAGS NI_NUMERICHOST
|
||||
#endif
|
||||
struct addrinfo *ai = conn->serv_addr;
|
||||
if(dns) {
|
||||
struct addrinfo *ai = dns->addr;
|
||||
|
||||
if (getnameinfo(ai->ai_addr, ai->ai_addrlen, hbuf, sizeof(hbuf), NULL, 0,
|
||||
niflags)) {
|
||||
snprintf(hbuf, sizeof(hbuf), "?");
|
||||
/* Lookup the name of the given address. This should probably be remade
|
||||
to use the DNS cache instead, as the host name is most likely cached
|
||||
already. */
|
||||
if (getnameinfo(ai->ai_addr, ai->ai_addrlen, hbuf, sizeof(hbuf), NULL, 0,
|
||||
NIFLAGS)) {
|
||||
snprintf(hbuf, sizeof(hbuf), "unknown");
|
||||
}
|
||||
else {
|
||||
if (ai->ai_canonname) {
|
||||
infof(data, "Connected to %s (%s) port %d\n", ai->ai_canonname, hbuf,
|
||||
conn->port);
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (ai->ai_canonname) {
|
||||
infof(data, "Connected to %s (%s) port %d\n", ai->ai_canonname, hbuf,
|
||||
conn->port);
|
||||
} else {
|
||||
infof(data, "Connected to %s port %d\n", hbuf, conn->port);
|
||||
else {
|
||||
snprintf(hbuf, sizeof(hbuf), "same host");
|
||||
}
|
||||
|
||||
infof(data, "Connected to %s port %d\n", hbuf, conn->port);
|
||||
}
|
||||
#else
|
||||
{
|
||||
|
|
Загрузка…
Ссылка в новой задаче