Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Browse files

Close #562 Close #1078 Parse file:// urls properly

The file:// protocol *always* has a hostname; it's frequently
abbreviated as an empty string, which represents 'localhost'
implicitly.

According to RFC 1738 (http://tools.ietf.org/html/rfc1738):

A file URL takes the form:

   file://<host>/<path>

where <host> is the fully qualified domain name of the system on
which the <path> is accessible...

As a special case, <host> can be the string "localhost" or the empty
string; this is interpreted as 'the machine from which the URL is
being interpreted'.
  • Loading branch information...
commit 58a1d7ec30a5e26625f42c97c3cbe9134368605d 1 parent eb4c9ed
@ryanpetrello ryanpetrello authored isaacs committed
Showing with 29 additions and 5 deletions.
  1. +1 −3 lib/url.js
  2. +28 −2 test/simple/test-url.js
View
4 lib/url.js
@@ -54,9 +54,7 @@ var protocolPattern = /^([a-z0-9]+:)/i,
// protocols that never have a hostname.
hostlessProtocol = {
'javascript': true,
- 'javascript:': true,
- 'file': true,
- 'file:': true
+ 'javascript:': true
},
// protocols that always have a path component.
pathedProtocol = {
View
30 test/simple/test-url.js
@@ -166,12 +166,38 @@ var parseTests = {
'file:///etc/passwd' : {
'href': 'file:///etc/passwd',
'protocol': 'file:',
- 'pathname': '///etc/passwd'
+ 'pathname': '/etc/passwd',
+ 'hostname': ''
+ },
+ 'file://localhost/etc/passwd' : {
+ 'href': 'file://localhost/etc/passwd',
+ 'protocol': 'file:',
+ 'pathname': '/etc/passwd',
+ 'hostname': 'localhost'
+ },
+ 'file://foo/etc/passwd' : {
+ 'href': 'file://foo/etc/passwd',
+ 'protocol': 'file:',
+ 'pathname': '/etc/passwd',
+ 'hostname': 'foo'
},
'file:///etc/node/' : {
'href': 'file:///etc/node/',
'protocol': 'file:',
- 'pathname': '///etc/node/'
+ 'pathname': '/etc/node/',
+ 'hostname': ''
+ },
+ 'file://localhost/etc/node/' : {
+ 'href': 'file://localhost/etc/node/',
+ 'protocol': 'file:',
+ 'pathname': '/etc/node/',
+ 'hostname': 'localhost'
+ },
+ 'file://foo/etc/node/' : {
+ 'href': 'file://foo/etc/node/',
+ 'protocol': 'file:',
+ 'pathname': '/etc/node/',
+ 'hostname': 'foo'
},
'http:/baz/../foo/bar' : {
'href': 'http:/baz/../foo/bar',
Please sign in to comment.
Something went wrong with that request. Please try again.