Commit 66051691 authored by Dan Fandrich's avatar Dan Fandrich
Browse files

Fixed parsing of an IPv6 proxy address to support a scope identifier,

as well as IPv4 addresses in IPv6 format. Also, better handle the case
of a malformatted IPv6 address (avoid empty and NULL strings).
parent 4c1c479f
Loading
Loading
Loading
Loading
+5 −0
Original line number Diff line number Diff line
@@ -6,6 +6,11 @@

                                  Changelog

Daniel Fandrich (31 Jul 2008)
- Fixed parsing of an IPv6 proxy address to support a scope identifier,
  as well as IPv4 addresses in IPv6 format. Also, better handle the case
  of a malformatted IPv6 address (avoid empty and NULL strings).

Daniel Stenberg (30 Jul 2008)
- Phil Blundell added the CURLOPT_SCOPE option, as well as adjusted the URL
  parser to allow numerical IPv6-addresses to be specified with the scope
+3 −0
Original line number Diff line number Diff line
@@ -904,6 +904,9 @@ IPv6

    sftp://[fe80::1234%251]/

  IPv6 addresses provided other than in URLs (e.g. to the --proxy, --interface
  or --ftp-port options) should not be URL encoded.


MAILING LISTS

+7 −5
Original line number Diff line number Diff line
@@ -3102,7 +3102,8 @@ static CURLcode ParseURLAndFillConnection(struct SessionHandle *data,
        if (!data->state.this_is_a_follow)
          /* Don't honour a scope given in a Location: header */
          conn->scope = scope;
      }
      } else
        infof(data, "Invalid IPv6 address format\n");
    }
  }

@@ -3406,13 +3407,14 @@ static CURLcode parse_proxy(struct SessionHandle *data,
  /* detect and extract RFC2732-style IPv6-addresses */
  if(*proxyptr == '[') {
    char *ptr = ++proxyptr; /* advance beyond the initial bracket */
    while(*ptr && (ISXDIGIT(*ptr) || (*ptr == ':')))
    while(*ptr && (ISXDIGIT(*ptr) || (*ptr == ':') || (*ptr == '%') || (*ptr == '.')))
      ptr++;
    if(*ptr == ']') {
      /* yeps, it ended nicely with a bracket as well */
      *ptr = 0;
      portptr = ptr+1;
    }
      *ptr++ = 0;
    } else
      infof(data, "Invalid IPv6 address format\n");
    portptr = ptr;
    /* Note that if this didn't end with a bracket, we still advanced the
     * proxyptr first, but I can't see anything wrong with that as no host
     * name nor a numeric can legally start with a bracket.