Skip to content

Commit c798461

Browse files
authored
[fix] Fix host parsing for file URLs (#210)
Fixes: #209 (comment)
1 parent 201034b commit c798461

File tree

2 files changed

+10
-1
lines changed

2 files changed

+10
-1
lines changed

Diff for: index.js

+3-1
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ var required = require('requires-port')
44
, qs = require('querystringify')
55
, slashes = /^[A-Za-z][A-Za-z0-9+-.]*:\/\//
66
, protocolre = /^([a-z][a-z0-9.+-]*:)?(\/\/)?([\\/]+)?([\S\s]*)/i
7+
, windowsDriveLetter = /^[a-zA-Z]:/
78
, whitespace = '[\\x09\\x0A\\x0B\\x0C\\x0D\\x20\\xA0\\u1680\\u180E\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200A\\u202F\\u205F\\u3000\\u2028\\u2029\\uFEFF]'
89
, left = new RegExp('^'+ whitespace +'+');
910

@@ -279,7 +280,8 @@ function Url(address, location, parser) {
279280
// component.
280281
//
281282
if (
282-
url.protocol === 'file:' ||
283+
extracted.protocol === 'file:' && (
284+
extracted.slashesCount !== 2 || windowsDriveLetter.test(address)) ||
283285
(!extracted.slashes &&
284286
(extracted.protocol ||
285287
extracted.slashesCount < 2 ||

Diff for: test/test.js

+7
Original file line numberDiff line numberDiff line change
@@ -593,6 +593,13 @@ describe('url-parse', function () {
593593
assume(data.pathname).equals('/c:/foo/bar/');
594594
assume(data.href).equals('file:///c:/foo/bar/');
595595

596+
data = parse('file://host/file');
597+
assume(data.protocol).equals('file:');
598+
assume(data.host).equals('host');
599+
assume(data.hostname).equals('host');
600+
assume(data.pathname).equals('/file');
601+
assume(data.href).equals('file://host/file');
602+
596603
data = parse('foo/bar', 'file:///baz');
597604
assume(data.protocol).equals('file:');
598605
assume(data.pathname).equals('/foo/bar');

0 commit comments

Comments
 (0)