Wether there is a bug to parse ipv6 url or not?

I’m reading the nginx0.9.1 source code.
now I find a bug when I read the “ngx_parse_inet6_url” function at 914
line in ngx_inet.c.
the code don’t correctly get the length of port when parsing the url.
for example:
the ipv6 url is : “[::FFFF:129.144.52.38]:8080/index.html”

the code: plz see the red color part
host = u->url.data + 1;
last = u->url.data + u->url.len;

p = ngx_strlchr(host, last, ']');

if (p == NULL) {
    u->err = "invalid host";
    return NGX_ERROR;
}

if (last - p) {

    port = p + 1;

    uri = ngx_strlchr(port, last, '/');

    if (uri) {
        if (u->listen || !u->uri_part) {
            u->err = "invalid host";
            return NGX_ERROR;
        }

        u->uri.len = last - uri;
        u->uri.data = uri;
    }

    if (*port == ':') {
        port++;

        [color=#FF0033]len = last - port; //here......... last is

the end of url ,but not the position of 8080 [/color]

"

Posted at Nginx Forum:
http://forum.nginx.org/read.php?2,176073,176073#msg-176073

Hello!

On Thu, Feb 17, 2011 at 03:01:57AM -0500, garry.lgr wrote:

I’m reading the nginx0.9.1 source code.
now I find a bug when I read the “ngx_parse_inet6_url” function at 914
line in ngx_inet.c.
the code don’t correctly get the length of port when parsing the url.
for example:
the ipv6 url is : “[::FFFF:129.144.52.38]:8080/index.html”

[…]

    if (*port == ':') {
        port++;

        [color=#FF0033]len = last - port; //here......... last is

the end of url ,but not the position of 8080 [/color]

"

Yes, thank you, looks like a bug.

This shouldn’t affect any current usage of ngx_parse_inet6_url()
though, as IPv6 is only supported in listen directive, which
shouldn’t contain uri part anyway (and ngx_parse_inet6_url() will
complain correctly about “invalid host” if uri part present for
listen addresses).

Maxim D.

This forum is not affiliated to the Ruby language, Ruby on Rails framework, nor any Ruby applications discussed here.

| Privacy Policy | Terms of Service | Remote Ruby Jobs