From 7d8aba81a5c2905d8214338f587dde3f1d7c7199 Mon Sep 17 00:00:00 2001 From: Jan Sorgalla Date: Tue, 16 Jan 2018 11:02:02 +0100 Subject: [PATCH 1/2] Add test for last middleware invoking $next() --- tests/Io/MiddlewareRunnerTest.php | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/tests/Io/MiddlewareRunnerTest.php b/tests/Io/MiddlewareRunnerTest.php index 757749c8..bbf9aa0a 100644 --- a/tests/Io/MiddlewareRunnerTest.php +++ b/tests/Io/MiddlewareRunnerTest.php @@ -454,4 +454,19 @@ function (RequestInterface $request) use ($once) { $this->assertTrue($promise instanceof CancellablePromiseInterface); $promise->cancel(); } + + public function testLastMiddlewareCanInvokeNext() + { + $middleware = new MiddlewareRunner(array( + function (RequestInterface $request, $next) { + return $next($request); + } + )); + + $request = new ServerRequest('GET', 'http://example.com/'); + + $response = $middleware($request); + + $this->assertNull($response); + } } From 67a32f2195f7f60051e14f024be8b0889fa9927b Mon Sep 17 00:00:00 2001 From: Jan Sorgalla Date: Tue, 16 Jan 2018 11:07:25 +0100 Subject: [PATCH 2/2] Check and abort if last middleware invoked $next() --- src/Io/MiddlewareRunner.php | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/Io/MiddlewareRunner.php b/src/Io/MiddlewareRunner.php index 8ba6a31b..b0529224 100644 --- a/src/Io/MiddlewareRunner.php +++ b/src/Io/MiddlewareRunner.php @@ -48,6 +48,10 @@ public function call(ServerRequestInterface $request, $position) return $that->call($request, $position + 1); }; + if (!isset($this->middleware[$position])) { + return null; + } + $handler = $this->middleware[$position]; return $handler($request, $next); }