From febbfa0d7fc1cfd0403dfb13c1768c8cab14dff7 Mon Sep 17 00:00:00 2001
From: Evan Lucas <evanlucas@me.com>
Date: Mon, 12 Jan 2015 00:13:17 -0600
Subject: [PATCH] url: fix parsing of ssh urls

Fix regression introduced in 61204720361824881aefd64f5bccda7d7be6617a
that broke parsing of some ssh: urls.

An example url is ssh://git@github.com:npm/npm.git
---
 lib/url.js                |  5 ++---
 test/parallel/test-url.js | 16 ++++++++++++++++
 2 files changed, 18 insertions(+), 3 deletions(-)

diff --git a/lib/url.js b/lib/url.js
index f2219580a7ce25..80c34b56d6bc74 100644
--- a/lib/url.js
+++ b/lib/url.js
@@ -72,9 +72,8 @@ var protocolPattern = /^([a-z0-9.+-]+:)/i,
     nonHostChars = ['%', '/', '?', ';', '#'].concat(autoEscape),
     hostEndingChars = ['/', '?', '#'],
     hostnameMaxLen = 255,
-    hostnamePatternString = '[^' + nonHostChars.join('') + ']{0,63}',
-    hostnamePartPattern = new RegExp('^' + hostnamePatternString + '$'),
-    hostnamePartStart = new RegExp('^(' + hostnamePatternString + ')(.*)$'),
+    hostnamePartPattern = /^[+a-z0-9A-Z_-]{0,63}$/,
+    hostnamePartStart = /^([+a-z0-9A-Z_-]{0,63})(.*)$/,
     // protocols that can allow "unsafe" and "unwise" chars.
     unsafeProtocol = {
       'javascript': true,
diff --git a/test/parallel/test-url.js b/test/parallel/test-url.js
index f12a00dbed0b72..9eaaf0353ff890 100644
--- a/test/parallel/test-url.js
+++ b/test/parallel/test-url.js
@@ -857,6 +857,22 @@ var parseTests = {
     pathname: '%0D%0Ad/e',
     path: '%0D%0Ad/e?f',
     href: 'http://a%0D%22%20%09%0A%3C\'b:b@c/%0D%0Ad/e?f'
+  },
+
+  // git urls used by npm
+  'git+ssh://git@github.com:npm/npm': {
+    protocol: 'git+ssh:',
+    slashes: true,
+    auth: 'git',
+    host: 'github.com',
+    port: null,
+    hostname: 'github.com',
+    hash: null,
+    search: null,
+    query: null,
+    pathname: '/:npm/npm',
+    path: '/:npm/npm',
+    href: 'git+ssh://git@github.com/:npm/npm'
   }
 
 };