Commit 39926181 authored by Daniel Stenberg's avatar Daniel Stenberg
Browse files

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...
parent 8415b4a2
Loading
Loading
Loading
Loading
+23 −13
Original line number Diff line number Diff line
@@ -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;

      /* 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), "?");
                      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);
    } else {
      infof(data, "Connected to %s port %d\n", hbuf, conn->port);
          return;
        }
      }
    }
    else {
      snprintf(hbuf, sizeof(hbuf), "same host");
    }

    infof(data, "Connected to %s port %d\n", hbuf, conn->port);
  }
#else
  {