diff --git a/src/Stream.php b/src/Stream.php index 96c0982e..c6de0458 100644 --- a/src/Stream.php +++ b/src/Stream.php @@ -364,4 +364,11 @@ private function isValidStreamResourceType(mixed $resource): bool return false; } + + /** + * Disallow stream cloning. + */ + private function __clone() + { + } } diff --git a/test/StreamTest.php b/test/StreamTest.php index 245d7bde..0503222d 100644 --- a/test/StreamTest.php +++ b/test/StreamTest.php @@ -5,6 +5,7 @@ namespace LaminasTest\Diactoros; use CurlHandle; +use Error; use GdImage; use InvalidArgumentException; use Laminas\Diactoros\Stream; @@ -679,4 +680,18 @@ public function testSizeReportsNullForPhpInputStreams(): void $stream = new Stream($resource); $this->assertNull($stream->getSize()); } + + public function testStreamsAreUnclonable(): void + { + $stream = new Stream(fopen('php://temp', 'r+')); + $stream->write('foo'); + + $this->assertSame('foo', $stream->__toString()); + + $this->expectException(Error::class); + $this->expectExceptionMessage('private Laminas\Diactoros\Stream::__clone()'); + + /** @psalm-suppress InvalidClone */ + clone $stream; + } }