Skip to content

Commit 24a2af6

Browse files
authored
Remove all listeners after emitting error in RequestHeaderParser (#68)
* Ensure removeAllListeners on all error event in RequestHeaderParser * Ensure all error events from RequestHeaderParser emit $this as second item in event * Reverted emitting $this with error
1 parent 777cfef commit 24a2af6

File tree

2 files changed

+10
-2
lines changed

2 files changed

+10
-2
lines changed

src/RequestHeaderParser.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ public function feed($data)
1919
{
2020
if (strlen($this->buffer) + strlen($data) > $this->maxSize) {
2121
$this->emit('error', array(new \OverflowException("Maximum header size of {$this->maxSize} exceeded."), $this));
22-
22+
$this->removeAllListeners();
2323
return;
2424
}
2525

tests/RequestHeaderParserTest.php

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -99,18 +99,26 @@ public function testHeadersEventShouldParsePathAndQueryString()
9999
public function testHeaderOverflowShouldEmitError()
100100
{
101101
$error = null;
102+
$passedParser = null;
102103

103104
$parser = new RequestHeaderParser();
104105
$parser->on('headers', $this->expectCallableNever());
105-
$parser->on('error', function ($message) use (&$error) {
106+
$parser->on('error', function ($message, $parser) use (&$error, &$passedParser) {
106107
$error = $message;
108+
$passedParser = $parser;
107109
});
108110

111+
$this->assertSame(1, count($parser->listeners('headers')));
112+
$this->assertSame(1, count($parser->listeners('error')));
113+
109114
$data = str_repeat('A', 4097);
110115
$parser->feed($data);
111116

112117
$this->assertInstanceOf('OverflowException', $error);
113118
$this->assertSame('Maximum header size of 4096 exceeded.', $error->getMessage());
119+
$this->assertSame($parser, $passedParser);
120+
$this->assertSame(0, count($parser->listeners('headers')));
121+
$this->assertSame(0, count($parser->listeners('error')));
114122
}
115123

116124
public function testGuzzleRequestParseException()

0 commit comments

Comments
 (0)