mirror of
https://github.com/expressjs/express.git
synced 2026-02-21 19:41:36 +00:00
@@ -1,3 +1,8 @@
|
||||
unreleased
|
||||
==========
|
||||
|
||||
* Fix regression routing a large stack in a single route
|
||||
|
||||
4.18.1 / 2022-04-29
|
||||
===================
|
||||
|
||||
|
||||
@@ -124,21 +124,21 @@ Route.prototype.dispatch = function dispatch(req, res, done) {
|
||||
return done(err)
|
||||
}
|
||||
|
||||
var layer = stack[idx++];
|
||||
if (!layer) {
|
||||
return done(err);
|
||||
}
|
||||
|
||||
// max sync stack
|
||||
if (++sync > 100) {
|
||||
return setImmediate(next, err)
|
||||
}
|
||||
|
||||
if (layer.method && layer.method !== method) {
|
||||
return next(err);
|
||||
var layer = stack[idx++]
|
||||
|
||||
// end of layers
|
||||
if (!layer) {
|
||||
return done(err)
|
||||
}
|
||||
|
||||
if (err) {
|
||||
if (layer.method && layer.method !== method) {
|
||||
next(err)
|
||||
} else if (err) {
|
||||
layer.handle_error(err, req, res, next);
|
||||
} else {
|
||||
layer.handle_request(req, res, next);
|
||||
|
||||
@@ -19,8 +19,16 @@ describe('Route', function(){
|
||||
var req = { method: 'GET', url: '/' }
|
||||
var route = new Route('/foo')
|
||||
|
||||
route.get(function (req, res, next) {
|
||||
req.counter = 0
|
||||
next()
|
||||
})
|
||||
|
||||
for (var i = 0; i < 6000; i++) {
|
||||
route.all(function (req, res, next) { next() })
|
||||
route.all(function (req, res, next) {
|
||||
req.counter++
|
||||
next()
|
||||
})
|
||||
}
|
||||
|
||||
route.get(function (req, res, next) {
|
||||
@@ -31,6 +39,7 @@ describe('Route', function(){
|
||||
route.dispatch(req, {}, function (err) {
|
||||
if (err) return done(err)
|
||||
assert.ok(req.called)
|
||||
assert.strictEqual(req.counter, 6000)
|
||||
done()
|
||||
})
|
||||
})
|
||||
|
||||
Reference in New Issue
Block a user