Skip to content

Commit f281443

Browse files
committed
Fix redirect error when req.url contains raw non-URL characters
1 parent a341f16 commit f281443

File tree

5 files changed

+15
-2
lines changed

5 files changed

+15
-2
lines changed

HISTORY.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
unreleased
22
==========
33

4+
* Fix redirect error when `req.url` contains raw non-URL characters
45
56

67
1.11.0 / 2016-06-07

index.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
* @private
1414
*/
1515

16+
var encodeUrl = require('encodeurl')
1617
var escapeHtml = require('escape-html')
1718
var parseUrl = require('parseurl')
1819
var resolve = require('path').resolve
@@ -172,7 +173,7 @@ function createRedirectDirectoryListener () {
172173
originalUrl.pathname = collapseLeadingSlashes(originalUrl.pathname + '/')
173174

174175
// reformat the URL
175-
var loc = url.format(originalUrl)
176+
var loc = encodeUrl(url.format(originalUrl))
176177
var msg = 'Redirecting to <a href="' + escapeHtml(loc) + '">' + escapeHtml(loc) + '</a>\n'
177178
var res = this.res
178179

package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
"license": "MIT",
77
"repository": "expressjs/serve-static",
88
"dependencies": {
9+
"encodeurl": "~1.0.1",
910
"escape-html": "~1.0.3",
1011
"parseurl": "~1.3.1",
1112
"send": "0.14.1"

test/fixtures/snow ☃/.gitkeep

Whitespace-only changes.

test/test.js

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -435,7 +435,9 @@ describe('serveStatic()', function () {
435435
describe('redirect', function () {
436436
var server
437437
before(function () {
438-
server = createServer(fixtures)
438+
server = createServer(fixtures, null, function (req, res) {
439+
req.url = req.url.replace(/\/snow(\/|$)/, '/snow \u2603$1')
440+
})
439441
})
440442

441443
it('should redirect directories', function (done) {
@@ -466,6 +468,14 @@ describe('serveStatic()', function () {
466468
.expect(301, done)
467469
})
468470

471+
it('should ensure redirect URL is properly encoded', function (done) {
472+
request(server)
473+
.get('/snow')
474+
.expect('Location', '/snow%20%E2%98%83/')
475+
.expect('Content-Type', /html/)
476+
.expect(301, 'Redirecting to <a href="/snow%20%E2%98%83/">/snow%20%E2%98%83/</a>\n', done)
477+
})
478+
469479
it('should not redirect incorrectly', function (done) {
470480
request(server)
471481
.get('/')

0 commit comments

Comments
 (0)