Re: [whatwg/url] Needs to ignore repeated slashes in file URL (#232)

Let me check my understanding.

According to [RFC3986](https://www.ietf.org/rfc/rfc3986.txt), `path` can start with multiple slashes only when `authority` is present. Note that `authority` can be empty as `reg-name` can be empty.

```
      URI         = scheme ":" hier-part [ "?" query ] [ "#" fragment ]

      hier-part   = "//" authority path-abempty
                  / path-absolute
                  / path-rootless
                  / path-empty
...
      authority   = [ userinfo "@" ] host [ ":" port ]
      host        = IP-literal / IPv4address / reg-name
      reg-name    = *( unreserved / pct-encoded / sub-delims )
...
      path-abempty  = *( "/" segment )
      path-absolute = "/" [ segment-nz *( "/" segment ) ]
      path-noscheme = segment-nz-nc *( "/" segment )
      path-rootless = segment-nz *( "/" segment )
      path-empty    = 0<pchar>
      segment       = *pchar
      segment-nz    = 1*pchar
      segment-nz-nc = 1*( unreserved / pct-encoded / sub-delims / "@" )
                    ; non-zero-length segment without any colon ":"

      pchar         = unreserved / pct-encoded / sub-delims / ":" / "@"
```

So, after seeing "file:",

 - If the parser sees "//":
  `authority` follows (note that it can be empty), followed by `path-abempty` which is either empty or starting with (possible multiple) slashes.
 - Otherwise, if the parser sees "/":
   `path-absolute` follows (including the "/"). Note that `path-absolute` cannot start with "//".
 - Otherwise:
   ...

Here are some examples:

| input | host | path | comment |
|---|--|--|--|
| file:/x/y/z | n/a | /x/y/z | `authority` is not present |
| file://x/y/z | x | /y/z |  |
| file://x//y/z | x | //y/z | |
| file:///x/y/z |  | /x/y/z | `authority` is empty |
| file:////x/y/z | | //x/y/z | `authority` is empty |
| file:/localhost/y/z | n/a | /localhost/y/z | `authority` is not present |
| file://localhost/y/z | localhost | /y/z | |
| file:///localhost/y/z | | /localhost/y/z | `authority` is empty |

Please correct me if I'm wrong.

-- 
You are receiving this because you are subscribed to this thread.
Reply to this email directly or view it on GitHub:
https://github.com/whatwg/url/issues/232#issuecomment-279941700

Received on Wednesday, 15 February 2017 07:58:51 UTC