From 1a0d12399f6a8d0d0e7684e6c6a676b7d405db5f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christian=20L=C3=BCck?= Date: Wed, 25 Jun 2025 13:57:11 +0200 Subject: [PATCH] Fix rejecting invalid HTTP request starting with newlines --- src/Ratchet/Http/HttpRequestParser.php | 2 +- tests/unit/Http/HttpRequestParserTest.php | 12 ++++++++++++ 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/src/Ratchet/Http/HttpRequestParser.php b/src/Ratchet/Http/HttpRequestParser.php index 5043c284..fa7a5caa 100644 --- a/src/Ratchet/Http/HttpRequestParser.php +++ b/src/Ratchet/Http/HttpRequestParser.php @@ -51,7 +51,7 @@ public function onMessage(ConnectionInterface $context, $data) { * @return boolean */ public function isEom($message) { - return (boolean)strpos($message, static::EOM); + return strpos($message, static::EOM) !== false; } /** diff --git a/tests/unit/Http/HttpRequestParserTest.php b/tests/unit/Http/HttpRequestParserTest.php index 05f2a76b..bbc96d59 100644 --- a/tests/unit/Http/HttpRequestParserTest.php +++ b/tests/unit/Http/HttpRequestParserTest.php @@ -50,6 +50,18 @@ public function testBufferOverflowResponse() { $this->parser->onMessage($conn, "Header-Is: Too Big"); } + public function testOnMessageThrowsExceptionForEmptyNewlines() { + $conn = $this->getMockBuilder('Ratchet\Mock\Connection')->getMock(); + + if (method_exists($this, 'expectException')) { + $this->expectException('InvalidArgumentException'); + } else { + $this->setExpectedException('InvalidArgumentException'); + } + + $this->parser->onMessage($conn, "\r\n\r\n"); + } + public function testReturnTypeIsRequest() { $conn = $this->getMockBuilder('Ratchet\Mock\Connection')->getMock(); $return = $this->parser->onMessage($conn, "GET / HTTP/1.1\r\nHost: socketo.me\r\n\r\n");