Skip to content

Commit

Permalink
Fix breaking bug on url joining resulting in paths like ///path.
Browse files Browse the repository at this point in the history
Added OS-agnostic url join helper.
  • Loading branch information
STRML committed Sep 12, 2014
1 parent df12aeb commit 73d865b
Show file tree
Hide file tree
Showing 2 changed files with 19 additions and 4 deletions.
14 changes: 10 additions & 4 deletions lib/http-proxy/common.js
Expand Up @@ -71,9 +71,7 @@ common.setupOutgoing = function(outgoing, options, req, forward) {
? url.parse(req.url).path
: req.url;

outgoing.path = targetPath
? targetPath + '/' + outgoingPath
: outgoingPath;
outgoing.path = common.urlJoin(targetPath, outgoingPath);

return outgoing;
};
Expand Down Expand Up @@ -109,4 +107,12 @@ common.getPort = function(req) {
return res ?
res[1] :
req.connection.pair ? '443' : '80' ;
}
};

// OS-agnostic join (doesn't break on URLs like path.join does on Windows)
common.urlJoin = function() {
var args = Array.prototype.slice.call(arguments);
// Join all strings, but remove empty strings so we don't get extra slashes from
// joining e.g. ['', 'am']
return args.filter(function(a) { return !!a; }).join('/').replace(/\/+/g, '/');
};
9 changes: 9 additions & 0 deletions test/lib-http-proxy-common-test.js
Expand Up @@ -150,6 +150,15 @@ describe('lib/http-proxy/common.js', function () {

expect(outgoing.path).to.eql('hi');
})

it('should properly join paths', function () {
var outgoing = {};
common.setupOutgoing(outgoing, {
target: { path: '/forward' },
}, { url: '/static/path' });

expect(outgoing.path).to.eql('/forward/static/path');
})
});

describe('#setupSocket', function () {
Expand Down

0 comments on commit 73d865b

Please sign in to comment.