diff options
Diffstat (limited to 'util/http.c')
-rw-r--r-- | util/http.c | 23 |
1 files changed, 17 insertions, 6 deletions
diff --git a/util/http.c b/util/http.c index 9acd146ec..5013ae6c1 100644 --- a/util/http.c +++ b/util/http.c @@ -343,16 +343,27 @@ do_parse_uri( PARSED_URI uri, int only_local_part ) } strlwr( p ); - uri->host = p; - if( (p3=strchr( p, ':' )) ) { - *p3++ = 0; + + /* Handle a host of [IP] so that [IP:V6]:port works */ + if( *p == '[' && (p3=strchr( p, ']' )) ) + { + *p3++ = '\0'; + /* worst case, uri->host should have length 0, points to \0 */ + uri->host = p + 1; + p = p3; + } + else + uri->host = p; + + if( (p3=strchr( p, ':' )) ) + { + *p3++ = '\0'; uri->port = atoi( p3 ); - } + } - uri->host = p; if( (n = remove_escapes( uri->host )) < 0 ) return G10ERR_BAD_URI; - if( n != strlen( p ) ) + if( n != strlen( uri->host ) ) return G10ERR_BAD_URI; /* hostname with a Nul in it */ p = p2 ? p2 : NULL; } |