solidusjs / solidus

A simple server that generates pages from JSON and Templates
MIT License
28 stars 7 forks source link

Unicode character in dynamic segment crashes app #152

Open joanniclaborde opened 6 years ago

joanniclaborde commented 6 years ago

Given this redirects.js file:

module.exports = [{
  from: /\/career(.*)/,
  to: 'http://site.com/career{0}'
}];

And this request: /careers/venture-capital-funding-increased-in-2010-%E2%80%93-but-still-remains-well-below-2007-levels/

This error happens:

TypeError: The header content contains invalid characters
  File "_http_outgoing.js", line 363, in ServerResponse.OutgoingMessage.setHeader
  File "/app/node_modules/solidus/node_modules/express/node_modules/connect/lib/patch.js", line 59, in ServerResponse.res.setHeader
    return setHeader.call(this, field, val);
  File "/app/node_modules/solidus/node_modules/express/lib/response.js", line 518, in ServerResponse.res.set.res.header
    this.setHeader(field, val);
  File "/app/node_modules/solidus/node_modules/express/lib/response.js", line 651, in ServerResponse.res.location
    this.set('Location', url);
  File "/app/node_modules/solidus/node_modules/express/lib/response.js", line 693, in ServerResponse.res.redirect
    this.location(url);
  File "/app/node_modules/solidus/lib/redirect.js", line 41, in null.<anonymous>
    res.redirect( status, utils.expandVariables(url, req.params) );
  File "/app/node_modules/solidus/node_modules/express/lib/router/index.js", line 161, in callbacks
    if (fn.length < 4) return fn(req, res, callbacks);
  File "/app/node_modules/solidus/node_modules/express/lib/router/index.js", line 135, in param
    callbacks();
  File "/app/node_modules/solidus/node_modules/express/lib/router/index.js", line 142, in pass
    param(err);
  File "/app/node_modules/solidus/node_modules/express/lib/router/index.js", line 170, in Router._dispatch
    })(0);
  File "/app/node_modules/solidus/node_modules/express/lib/router/index.js", line 33, in Object.router
    self._dispatch(req, res, next);
  File "/app/node_modules/solidus/node_modules/express/node_modules/connect/lib/proto.js", line 190, in next
    layer.handle(req, res, next);
  File "/app/node_modules/solidus/lib/server.js", line 136, in null.<anonymous>
    next();
  File "/app/node_modules/solidus/node_modules/continuation-local-storage/context.js", line 48, in Namespace.run
    fn(context);
  File "/app/node_modules/solidus/lib/server.js", line 134, in Object.handle
    solidus_server.session.run(function() {
  File "/app/node_modules/solidus/node_modules/express/node_modules/connect/lib/proto.js", line 190, in next
    layer.handle(req, res, next);
  File "/app/node_modules/solidus/node_modules/express/node_modules/connect/lib/middleware/static.js", line 60, in resume
    next();
  File "/app/node_modules/solidus/node_modules/express/node_modules/connect/lib/middleware/static.js", line 73, in SendStream.error
    if (404 == err.status) return resume();
  File "events.js", line 77, in emitOne
  File "events.js", line 169, in SendStream.emit
  File "/app/node_modules/solidus/node_modules/express/node_modules/send/lib/send.js", line 147, in SendStream.error
    if (this.listeners('error').length) return this.emit('error', err);
  File "/app/node_modules/solidus/node_modules/express/node_modules/send/lib/send.js", line 248, in SendStream.onStatError
    if (~notfound.indexOf(err.code)) return this.error(404, err);
  File "/app/node_modules/solidus/node_modules/express/node_modules/send/lib/send.js", line 320, in null.<anonymous>
    if (err) return self.onStatError(err);
  File "/app/node_modules/solidus/node_modules/continuation-local-storage/node_modules/async-listener/glue.js", line 188, in null.<anonymous>
    var returned = original.apply(this, arguments);
  File "fs.js", line 82, in FSReqWrap.oncomplete

The redirect URL should contain encoded characters. Also, does this happen with resources too?