Skip to content

[1.x] Do not call Reflection*::setAccessible() in PHP >= 8.1 #325

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 1 commit into
base: 1.x
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 3 additions & 1 deletion src/DnsConnector.php
Original file line number Diff line number Diff line change
Expand Up @@ -68,7 +68,9 @@ function ($resolve, $reject) use (&$promise, &$resolved, $uri, $connector, $host
// avoid garbage references by replacing all closures in call stack.
// what a lovely piece of code!
$r = new \ReflectionProperty('Exception', 'trace');
$r->setAccessible(true);
if (\PHP_VERSION_ID < 80100) {
$r->setAccessible(true);
}
$trace = $r->getValue($e);

// Exception trace arguments are not available on some PHP 7.4 installs
Expand Down
4 changes: 3 additions & 1 deletion src/SecureConnector.php
Original file line number Diff line number Diff line change
Expand Up @@ -91,7 +91,9 @@ public function connect($uri)
// avoid garbage references by replacing all closures in call stack.
// what a lovely piece of code!
$r = new \ReflectionProperty('Exception', 'trace');
$r->setAccessible(true);
if (\PHP_VERSION_ID < 80100) {
$r->setAccessible(true);
}
$trace = $r->getValue($e);

// Exception trace arguments are not available on some PHP 7.4 installs
Expand Down
32 changes: 24 additions & 8 deletions tests/ConnectorTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -12,11 +12,15 @@ public function testConstructWithoutLoopAssignsLoopAutomatically()
$connector = new Connector();

$ref = new \ReflectionProperty($connector, 'connectors');
$ref->setAccessible(true);
if (\PHP_VERSION_ID < 80100) {
$ref->setAccessible(true);
}
$connectors = $ref->getValue($connector);

$ref = new \ReflectionProperty($connectors['tcp'], 'loop');
$ref->setAccessible(true);
if (\PHP_VERSION_ID < 80100) {
$ref->setAccessible(true);
}
$loop = $ref->getValue($connectors['tcp']);

$this->assertInstanceOf('React\EventLoop\LoopInterface', $loop);
Expand All @@ -29,11 +33,15 @@ public function testConstructWithLoopAssignsGivenLoop()
$connector = new Connector(array(), $loop);

$ref = new \ReflectionProperty($connector, 'connectors');
$ref->setAccessible(true);
if (\PHP_VERSION_ID < 80100) {
$ref->setAccessible(true);
}
$connectors = $ref->getValue($connector);

$ref = new \ReflectionProperty($connectors['tcp'], 'loop');
$ref->setAccessible(true);
if (\PHP_VERSION_ID < 80100) {
$ref->setAccessible(true);
}
$loop = $ref->getValue($connectors['tcp']);

$this->assertInstanceOf('React\EventLoop\LoopInterface', $loop);
Expand All @@ -50,7 +58,9 @@ public function testConstructWithContextAssignsGivenContext()
));

$ref = new \ReflectionProperty($connector, 'connectors');
$ref->setAccessible(true);
if (\PHP_VERSION_ID < 80100) {
$ref->setAccessible(true);
}
$connectors = $ref->getValue($connector);

$this->assertSame($tcp, $connectors['tcp']);
Expand All @@ -67,7 +77,9 @@ public function testConstructWithLegacyContextSignatureAssignsGivenContext()
));

$ref = new \ReflectionProperty($connector, 'connectors');
$ref->setAccessible(true);
if (\PHP_VERSION_ID < 80100) {
$ref->setAccessible(true);
}
$connectors = $ref->getValue($connector);

$this->assertSame($tcp, $connectors['tcp']);
Expand All @@ -80,11 +92,15 @@ public function testConstructWithLegacyLoopSignatureAssignsGivenLoop()
$connector = new Connector($loop);

$ref = new \ReflectionProperty($connector, 'connectors');
$ref->setAccessible(true);
if (\PHP_VERSION_ID < 80100) {
$ref->setAccessible(true);
}
$connectors = $ref->getValue($connector);

$ref = new \ReflectionProperty($connectors['tcp'], 'loop');
$ref->setAccessible(true);
if (\PHP_VERSION_ID < 80100) {
$ref->setAccessible(true);
}
$loop = $ref->getValue($connectors['tcp']);

$this->assertInstanceOf('React\EventLoop\LoopInterface', $loop);
Expand Down
8 changes: 6 additions & 2 deletions tests/FunctionalTcpServerTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -331,7 +331,9 @@ public function testServerPassesContextOptionsToSocket()
));

$ref = new \ReflectionProperty($server, 'master');
$ref->setAccessible(true);
if (\PHP_VERSION_ID < 80100) {
$ref->setAccessible(true);
}
$socket = $ref->getValue($server);

$context = stream_context_get_options($socket);
Expand All @@ -346,7 +348,9 @@ public function testServerPassesDefaultBacklogSizeViaContextOptionsToSocket()
$server = new TcpServer(0);

$ref = new \ReflectionProperty($server, 'master');
$ref->setAccessible(true);
if (\PHP_VERSION_ID < 80100) {
$ref->setAccessible(true);
}
$socket = $ref->getValue($server);

$context = stream_context_get_options($socket);
Expand Down
24 changes: 18 additions & 6 deletions tests/HappyEyeBallsConnectionBuilderTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -844,13 +844,17 @@ public function testCheckCallsRejectFunctionImmediateWithoutLeavingDanglingPromi
$builder = new HappyEyeBallsConnectionBuilder($loop, $connector, $resolver, $uri, $host, $parts);

$ref = new \ReflectionProperty($builder, 'connectQueue');
$ref->setAccessible(true);
if (\PHP_VERSION_ID < 80100) {
$ref->setAccessible(true);
}
$ref->setValue($builder, array('::1'));

$builder->check($this->expectCallableNever(), function () { });

$ref = new \ReflectionProperty($builder, 'connectionPromises');
$ref->setAccessible(true);
if (\PHP_VERSION_ID < 80100) {
$ref->setAccessible(true);
}
$promises = $ref->getValue($builder);

$this->assertEquals(array(), $promises);
Expand All @@ -876,7 +880,9 @@ public function testCleanUpCancelsAllPendingConnectionAttempts()
$builder = new HappyEyeBallsConnectionBuilder($loop, $connector, $resolver, $uri, $host, $parts);

$ref = new \ReflectionProperty($builder, 'connectQueue');
$ref->setAccessible(true);
if (\PHP_VERSION_ID < 80100) {
$ref->setAccessible(true);
}
$ref->setValue($builder, array('::1', '::1'));

$builder->check($this->expectCallableNever(), function () { });
Expand Down Expand Up @@ -904,7 +910,9 @@ public function testCleanUpCancelsAllPendingConnectionAttemptsWithoutStartingNew
$builder = new HappyEyeBallsConnectionBuilder($loop, $connector, $resolver, $uri, $host, $parts);

$ref = new \ReflectionProperty($builder, 'connectQueue');
$ref->setAccessible(true);
if (\PHP_VERSION_ID < 80100) {
$ref->setAccessible(true);
}
$ref->setValue($builder, array('::1', '::1'));

$builder->check($this->expectCallableNever(), function () { });
Expand All @@ -927,7 +935,9 @@ public function testMixIpsIntoConnectQueueSometimesAssignsInOriginalOrder()
$builder->mixIpsIntoConnectQueue(array('::1', '::2'));

$ref = new \ReflectionProperty($builder, 'connectQueue');
$ref->setAccessible(true);
if (\PHP_VERSION_ID < 80100) {
$ref->setAccessible(true);
}
$value = $ref->getValue($builder);

if ($value === array('::1', '::2')) {
Expand All @@ -953,7 +963,9 @@ public function testMixIpsIntoConnectQueueSometimesAssignsInReverseOrder()
$builder->mixIpsIntoConnectQueue(array('::1', '::2'));

$ref = new \ReflectionProperty($builder, 'connectQueue');
$ref->setAccessible(true);
if (\PHP_VERSION_ID < 80100) {
$ref->setAccessible(true);
}
$value = $ref->getValue($builder);

if ($value === array('::2', '::1')) {
Expand Down
4 changes: 3 additions & 1 deletion tests/HappyEyeBallsConnectorTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,9 @@ public function testConstructWithoutLoopAssignsLoopAutomatically()
$connector = new HappyEyeBallsConnector(null, $this->tcp, $this->resolver);

$ref = new \ReflectionProperty($connector, 'loop');
$ref->setAccessible(true);
if (\PHP_VERSION_ID < 80100) {
$ref->setAccessible(true);
}
$loop = $ref->getValue($connector);

$this->assertInstanceOf('React\EventLoop\LoopInterface', $loop);
Expand Down
24 changes: 18 additions & 6 deletions tests/SecureConnectorTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -37,11 +37,15 @@ public function testConstructWithoutLoopAssignsLoopAutomatically()
$connector = new SecureConnector($this->tcp);

$ref = new \ReflectionProperty($connector, 'streamEncryption');
$ref->setAccessible(true);
if (\PHP_VERSION_ID < 80100) {
$ref->setAccessible(true);
}
$streamEncryption = $ref->getValue($connector);

$ref = new \ReflectionProperty($streamEncryption, 'loop');
$ref->setAccessible(true);
if (\PHP_VERSION_ID < 80100) {
$ref->setAccessible(true);
}
$loop = $ref->getValue($streamEncryption);

$this->assertInstanceOf('React\EventLoop\LoopInterface', $loop);
Expand Down Expand Up @@ -185,7 +189,9 @@ public function testStreamEncryptionWillBeEnabledAfterConnecting()
$encryption->expects($this->once())->method('enable')->with($connection)->willReturn(new \React\Promise\Promise(function () { }));

$ref = new \ReflectionProperty($this->connector, 'streamEncryption');
$ref->setAccessible(true);
if (\PHP_VERSION_ID < 80100) {
$ref->setAccessible(true);
}
$ref->setValue($this->connector, $encryption);

$this->tcp->expects($this->once())->method('connect')->with($this->equalTo('example.com:80'))->willReturn(Promise\resolve($connection));
Expand All @@ -202,7 +208,9 @@ public function testConnectionWillBeRejectedIfStreamEncryptionFailsAndClosesConn
$encryption->expects($this->once())->method('enable')->willReturn(Promise\reject(new \RuntimeException('TLS error', 123)));

$ref = new \ReflectionProperty($this->connector, 'streamEncryption');
$ref->setAccessible(true);
if (\PHP_VERSION_ID < 80100) {
$ref->setAccessible(true);
}
$ref->setValue($this->connector, $encryption);

$this->tcp->expects($this->once())->method('connect')->with($this->equalTo('example.com:80'))->willReturn(Promise\resolve($connection));
Expand Down Expand Up @@ -234,7 +242,9 @@ public function testCancelDuringStreamEncryptionCancelsEncryptionAndClosesConnec
$encryption->expects($this->once())->method('enable')->willReturn($pending);

$ref = new \ReflectionProperty($this->connector, 'streamEncryption');
$ref->setAccessible(true);
if (\PHP_VERSION_ID < 80100) {
$ref->setAccessible(true);
}
$ref->setValue($this->connector, $encryption);

$deferred = new Deferred();
Expand Down Expand Up @@ -301,7 +311,9 @@ public function testRejectionDuringTlsHandshakeShouldNotCreateAnyGarbageReferenc
$encryption->expects($this->once())->method('enable')->willReturn($tls->promise());

$ref = new \ReflectionProperty($this->connector, 'streamEncryption');
$ref->setAccessible(true);
if (\PHP_VERSION_ID < 80100) {
$ref->setAccessible(true);
}
$ref->setValue($this->connector, $encryption);

$promise = $this->connector->connect('example.com:80');
Expand Down
24 changes: 18 additions & 6 deletions tests/SecureServerTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -33,11 +33,15 @@ public function testConstructWithoutLoopAssignsLoopAutomatically()
$server = new SecureServer($tcp);

$ref = new \ReflectionProperty($server, 'encryption');
$ref->setAccessible(true);
if (\PHP_VERSION_ID < 80100) {
$ref->setAccessible(true);
}
$encryption = $ref->getValue($server);

$ref = new \ReflectionProperty($encryption, 'loop');
$ref->setAccessible(true);
if (\PHP_VERSION_ID < 80100) {
$ref->setAccessible(true);
}
$loop = $ref->getValue($encryption);

$this->assertInstanceOf('React\EventLoop\LoopInterface', $loop);
Expand Down Expand Up @@ -137,11 +141,15 @@ public function testConnectionWillTryToEnableEncryptionAndWaitForHandshake()
$encryption->expects($this->once())->method('enable')->willReturn($pending);

$ref = new \ReflectionProperty($server, 'encryption');
$ref->setAccessible(true);
if (\PHP_VERSION_ID < 80100) {
$ref->setAccessible(true);
}
$ref->setValue($server, $encryption);

$ref = new \ReflectionProperty($server, 'context');
$ref->setAccessible(true);
if (\PHP_VERSION_ID < 80100) {
$ref->setAccessible(true);
}
$ref->setValue($server, array());

$server->on('error', $this->expectCallableNever());
Expand All @@ -168,11 +176,15 @@ public function testConnectionWillBeClosedWithErrorIfEnablingEncryptionFails()
$encryption->expects($this->once())->method('enable')->willReturn(\React\Promise\reject($error));

$ref = new \ReflectionProperty($server, 'encryption');
$ref->setAccessible(true);
if (\PHP_VERSION_ID < 80100) {
$ref->setAccessible(true);
}
$ref->setValue($server, $encryption);

$ref = new \ReflectionProperty($server, 'context');
$ref->setAccessible(true);
if (\PHP_VERSION_ID < 80100) {
$ref->setAccessible(true);
}
$ref->setValue($server, array());

$error = null;
Expand Down
12 changes: 9 additions & 3 deletions tests/ServerTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -17,11 +17,15 @@ public function testConstructWithoutLoopAssignsLoopAutomatically()
$server = new Server(0);

$ref = new \ReflectionProperty($server, 'server');
$ref->setAccessible(true);
if (\PHP_VERSION_ID < 80100) {
$ref->setAccessible(true);
}
$tcp = $ref->getValue($server);

$ref = new \ReflectionProperty($tcp, 'loop');
$ref->setAccessible(true);
if (\PHP_VERSION_ID < 80100) {
$ref->setAccessible(true);
}
$loop = $ref->getValue($tcp);

$this->assertInstanceOf('React\EventLoop\LoopInterface', $loop);
Expand Down Expand Up @@ -115,7 +119,9 @@ public function testEmitsErrorWhenUnderlyingTcpServerEmitsError()
$server = new Server(0);

$ref = new \ReflectionProperty($server, 'server');
$ref->setAccessible(true);
if (\PHP_VERSION_ID < 80100) {
$ref->setAccessible(true);
}
$tcp = $ref->getvalue($server);

$error = new \RuntimeException();
Expand Down
12 changes: 9 additions & 3 deletions tests/SocketServerTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -18,11 +18,15 @@ public function testConstructWithoutLoopAssignsLoopAutomatically()
$socket->close();

$ref = new \ReflectionProperty($socket, 'server');
$ref->setAccessible(true);
if (\PHP_VERSION_ID < 80100) {
$ref->setAccessible(true);
}
$tcp = $ref->getValue($socket);

$ref = new \ReflectionProperty($tcp, 'loop');
$ref->setAccessible(true);
if (\PHP_VERSION_ID < 80100) {
$ref->setAccessible(true);
}
$loop = $ref->getValue($tcp);

$this->assertInstanceOf('React\EventLoop\LoopInterface', $loop);
Expand Down Expand Up @@ -151,7 +155,9 @@ public function testEmitsErrorWhenUnderlyingTcpServerEmitsError()
$socket = new SocketServer('127.0.0.1:0', array());

$ref = new \ReflectionProperty($socket, 'server');
$ref->setAccessible(true);
if (\PHP_VERSION_ID < 80100) {
$ref->setAccessible(true);
}
$tcp = $ref->getvalue($socket);

$error = new \RuntimeException();
Expand Down
4 changes: 3 additions & 1 deletion tests/TcpConnectorTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,9 @@ public function testConstructWithoutLoopAssignsLoopAutomatically()
$connector = new TcpConnector();

$ref = new \ReflectionProperty($connector, 'loop');
$ref->setAccessible(true);
if (\PHP_VERSION_ID < 80100) {
$ref->setAccessible(true);
}
$loop = $ref->getValue($connector);

$this->assertInstanceOf('React\EventLoop\LoopInterface', $loop);
Expand Down
4 changes: 3 additions & 1 deletion tests/TcpServerTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,9 @@ public function testConstructWithoutLoopAssignsLoopAutomatically()
$server = new TcpServer(0);

$ref = new \ReflectionProperty($server, 'loop');
$ref->setAccessible(true);
if (\PHP_VERSION_ID < 80100) {
$ref->setAccessible(true);
}
$loop = $ref->getValue($server);

$this->assertInstanceOf('React\EventLoop\LoopInterface', $loop);
Expand Down
Loading
Loading