diff --git a/src/RequestHeaderParser.php b/src/RequestHeaderParser.php index 4e4db46f..ca9d57f7 100644 --- a/src/RequestHeaderParser.php +++ b/src/RequestHeaderParser.php @@ -19,7 +19,7 @@ public function feed($data) { if (strlen($this->buffer) + strlen($data) > $this->maxSize) { $this->emit('error', array(new \OverflowException("Maximum header size of {$this->maxSize} exceeded."), $this)); - + $this->removeAllListeners(); return; } diff --git a/tests/RequestHeaderParserTest.php b/tests/RequestHeaderParserTest.php index b2fa87dc..807af42c 100644 --- a/tests/RequestHeaderParserTest.php +++ b/tests/RequestHeaderParserTest.php @@ -99,18 +99,26 @@ public function testHeadersEventShouldParsePathAndQueryString() public function testHeaderOverflowShouldEmitError() { $error = null; + $passedParser = null; $parser = new RequestHeaderParser(); $parser->on('headers', $this->expectCallableNever()); - $parser->on('error', function ($message) use (&$error) { + $parser->on('error', function ($message, $parser) use (&$error, &$passedParser) { $error = $message; + $passedParser = $parser; }); + $this->assertSame(1, count($parser->listeners('headers'))); + $this->assertSame(1, count($parser->listeners('error'))); + $data = str_repeat('A', 4097); $parser->feed($data); $this->assertInstanceOf('OverflowException', $error); $this->assertSame('Maximum header size of 4096 exceeded.', $error->getMessage()); + $this->assertSame($parser, $passedParser); + $this->assertSame(0, count($parser->listeners('headers'))); + $this->assertSame(0, count($parser->listeners('error'))); } public function testGuzzleRequestParseException()