diff options
| author | Dan Fandrich <dan@coneharvesters.com> | 2008-07-31 20:04:00 +0000 | 
|---|---|---|
| committer | Dan Fandrich <dan@coneharvesters.com> | 2008-07-31 20:04:00 +0000 | 
| commit | 660516914e35631714c73a2002ccfa4d854a0290 (patch) | |
| tree | ab82ce8a61ad7a6ec8af16b0c92e720ad5844cbc /lib/url.c | |
| parent | 4c1c479fcf27cdc9090434474aa01ebcd36d1f08 (diff) | |
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).
Diffstat (limited to 'lib/url.c')
| -rw-r--r-- | lib/url.c | 12 | 
1 files changed, 7 insertions, 5 deletions
| @@ -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. | 
