Skip to content

Commit e2422cb

Browse files
committed
Fix GH-16955: Use empheral ports for OpenSSL server client tests
1 parent 39c292b commit e2422cb

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

41 files changed

+225
-271
lines changed

ext/openssl/tests/ServerClientTestCase.inc

Lines changed: 24 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,11 @@ function phpt_wait($worker = WORKER_DEFAULT_NAME, $timeout = null)
1414
ServerClientTestCase::getInstance()->wait($worker, $timeout);
1515
}
1616

17+
function phpt_notify_server_start($server)
18+
{
19+
ServerClientTestCase::getInstance()->notify_server_start($server);
20+
}
21+
1722
function phpt_has_sslv3() {
1823
static $result = null;
1924
if (!is_null($result)) {
@@ -119,44 +124,55 @@ class ServerClientTestCase
119124
eval($code);
120125
}
121126

122-
public function run($masterCode, $workerCode)
127+
public function run($masterCode, $workerCode, bool $empheral = false)
123128
{
124129
if (!is_array($workerCode)) {
125130
$workerCode = [WORKER_DEFAULT_NAME => $workerCode];
126131
}
127132
foreach ($workerCode as $worker => $code) {
128133
$this->spawnWorkerProcess($worker, $this->stripPhpTagsFromCode($code));
129134
}
135+
if ($empheral) {
136+
$addr = trim($this->wait(WORKER_DEFAULT_NAME));
137+
if (empty($addr)) {
138+
throw new \Exception("Failed server start");
139+
}
140+
$masterCode = preg_replace('/{{\s*ADDR\s*}}/', $addr, $masterCode);
141+
}
130142
eval($this->stripPhpTagsFromCode($masterCode));
131143
foreach ($workerCode as $worker => $code) {
132144
$this->cleanupWorkerProcess($worker);
133145
}
134146
}
135147

136-
public function wait($worker, $timeout = null)
148+
public function wait($worker, $timeout = null): ?string
137149
{
138150
$handle = $this->isWorker ? STDIN : $this->workerStdOut[$worker];
139151
if ($timeout === null) {
140-
fgets($handle);
141-
return true;
152+
return fgets($handle);
142153
}
143154

144155
stream_set_blocking($handle, false);
145156
$read = [$handle];
146157
$result = stream_select($read, $write, $except, $timeout);
147158
if (!$result) {
148-
return false;
159+
return null;
149160
}
150161

151-
fgets($handle);
162+
$result = fgets($handle);
152163
stream_set_blocking($handle, true);
153-
return true;
164+
return $result;
154165
}
155166

156-
public function notify($worker)
167+
public function notify($worker): void
157168
{
158169
fwrite($this->isWorker ? STDOUT : $this->workerStdIn[$worker], "\n");
159170
}
171+
172+
public function notify_server_start($server): void
173+
{
174+
echo stream_socket_get_name($server, false) . "\n";
175+
}
160176
}
161177

162178
if (isset($argv[1]) && $argv[1] === WORKER_ARGV_VALUE) {

ext/openssl/tests/bug46127.phpt

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -11,30 +11,29 @@ if (!function_exists("proc_open")) die("skip no proc_open");
1111
$certFile = __DIR__ . DIRECTORY_SEPARATOR . 'bug46127.pem.tmp';
1212

1313
$serverCode = <<<'CODE'
14-
$serverUri = "ssl://127.0.0.1:64321";
14+
$serverUri = "ssl://127.0.0.1:0";
1515
$serverFlags = STREAM_SERVER_BIND | STREAM_SERVER_LISTEN;
1616
$serverCtx = stream_context_create(['ssl' => [
1717
'local_cert' => '%s',
1818
]]);
1919
2020
$sock = stream_socket_server($serverUri, $errno, $errstr, $serverFlags, $serverCtx);
21-
phpt_notify();
21+
phpt_notify_server_start($sock);
2222
2323
$link = stream_socket_accept($sock);
2424
fwrite($link, "Sending bug 46127\n");
2525
CODE;
2626
$serverCode = sprintf($serverCode, $certFile);
2727

2828
$clientCode = <<<'CODE'
29-
$serverUri = "ssl://127.0.0.1:64321";
29+
$serverUri = "ssl://{{ ADDR }}";
3030
$clientFlags = STREAM_CLIENT_CONNECT;
3131
3232
$clientCtx = stream_context_create(['ssl' => [
3333
'verify_peer' => false,
3434
'verify_peer_name' => false
3535
]]);
3636
37-
phpt_wait();
3837
$sock = stream_socket_client($serverUri, $errno, $errstr, 2, $clientFlags, $clientCtx);
3938
4039
echo fgets($sock);
@@ -45,7 +44,7 @@ $certificateGenerator = new CertificateGenerator();
4544
$certificateGenerator->saveNewCertAsFileWithKey('bug46127', $certFile);
4645

4746
include 'ServerClientTestCase.inc';
48-
ServerClientTestCase::getInstance()->run($clientCode, $serverCode);
47+
ServerClientTestCase::getInstance()->run($clientCode, $serverCode, true);
4948
?>
5049
--CLEAN--
5150
<?php

ext/openssl/tests/bug48182.phpt

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -12,14 +12,14 @@ $certFile = __DIR__ . DIRECTORY_SEPARATOR . 'bug48182.pem.tmp';
1212
$cacertFile = __DIR__ . DIRECTORY_SEPARATOR . 'bug48182-ca.pem.tmp';
1313

1414
$serverCode = <<<'CODE'
15-
$serverUri = "ssl://127.0.0.1:64321";
15+
$serverUri = "ssl://127.0.0.1:0";
1616
$serverFlags = STREAM_SERVER_BIND | STREAM_SERVER_LISTEN;
1717
$serverCtx = stream_context_create(['ssl' => [
1818
'local_cert' => '%s'
1919
]]);
2020
2121
$server = stream_socket_server($serverUri, $errno, $errstr, $serverFlags, $serverCtx);
22-
phpt_notify();
22+
phpt_notify_server_start($server);
2323
2424
$client = @stream_socket_accept($server, 1);
2525
@@ -30,14 +30,13 @@ $serverCode = sprintf($serverCode, $certFile);
3030

3131
$peerName = 'bug48182';
3232
$clientCode = <<<'CODE'
33-
$serverUri = "ssl://127.0.0.1:64321";
33+
$serverUri = "ssl://{{ ADDR }}";
3434
$clientFlags = STREAM_CLIENT_CONNECT | STREAM_CLIENT_ASYNC_CONNECT;
3535
$clientCtx = stream_context_create(['ssl' => [
3636
'cafile' => '%s',
3737
'peer_name' => '%s'
3838
]]);
3939
40-
phpt_wait();
4140
$client = stream_socket_client($serverUri, $errno, $errstr, 10, $clientFlags, $clientCtx);
4241
4342
$data = "Sending data over to SSL server in async mode with contents like Hello World\n";
@@ -55,7 +54,7 @@ $certificateGenerator->saveCaCert($cacertFile);
5554
$certificateGenerator->saveNewCertAsFileWithKey($peerName, $certFile);
5655

5756
include 'ServerClientTestCase.inc';
58-
ServerClientTestCase::getInstance()->run($clientCode, $serverCode);
57+
ServerClientTestCase::getInstance()->run($clientCode, $serverCode, true);
5958
?>
6059
--CLEAN--
6160
<?php

ext/openssl/tests/bug54992.phpt

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -12,14 +12,14 @@ $certFile = __DIR__ . DIRECTORY_SEPARATOR . 'bug54992.pem.tmp';
1212
$cacertFile = __DIR__ . DIRECTORY_SEPARATOR . 'bug54992-ca.pem.tmp';
1313

1414
$serverCode = <<<'CODE'
15-
$serverUri = "ssl://127.0.0.1:64321";
15+
$serverUri = "ssl://127.0.0.1:0";
1616
$serverFlags = STREAM_SERVER_BIND | STREAM_SERVER_LISTEN;
1717
$serverCtx = stream_context_create(['ssl' => [
1818
'local_cert' => '%s',
1919
]]);
2020
2121
$server = stream_socket_server($serverUri, $errno, $errstr, $serverFlags, $serverCtx);
22-
phpt_notify();
22+
phpt_notify_server_start($server);
2323
2424
@stream_socket_accept($server, 1);
2525
CODE;
@@ -28,15 +28,14 @@ $serverCode = sprintf($serverCode, $certFile);
2828
$peerName = 'bug54992_actual_peer_name';
2929
$wrongPeerName = 'bug54992_expected_peer_name';
3030
$clientCode = <<<'CODE'
31-
$serverUri = "ssl://127.0.0.1:64321";
31+
$serverUri = "ssl://{{ ADDR }}";
3232
$clientFlags = STREAM_CLIENT_CONNECT;
3333
$clientCtx = stream_context_create(['ssl' => [
3434
'verify_peer' => true,
3535
'cafile' => '%s',
3636
'peer_name' => '%s',
3737
]]);
3838
39-
phpt_wait();
4039
$client = stream_socket_client($serverUri, $errno, $errstr, 2, $clientFlags, $clientCtx);
4140
4241
var_dump($client);
@@ -49,7 +48,7 @@ $certificateGenerator->saveCaCert($cacertFile);
4948
$certificateGenerator->saveNewCertAsFileWithKey($peerName, $certFile);
5049

5150
include 'ServerClientTestCase.inc';
52-
ServerClientTestCase::getInstance()->run($clientCode, $serverCode);
51+
ServerClientTestCase::getInstance()->run($clientCode, $serverCode, true);
5352
?>
5453
--CLEAN--
5554
<?php
@@ -61,5 +60,5 @@ Warning: stream_socket_client(): Peer certificate CN=`bug54992_actual_peer_name'
6160

6261
Warning: stream_socket_client(): Failed to enable crypto in %s on line %d
6362

64-
Warning: stream_socket_client(): Unable to connect to ssl://127.0.0.1:64321 (Unknown error) in %s on line %d
63+
Warning: stream_socket_client(): Unable to connect to ssl://127.0.0.1:%d (Unknown error) in %s on line %d
6564
bool(false)

ext/openssl/tests/bug62890.phpt

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -19,8 +19,8 @@ $serverCode = <<<'CODE'
1919
'security_level' => 1,
2020
]]);
2121
22-
$server = stream_socket_server('tls://127.0.0.1:64321', $errno, $errstr, $flags, $ctx);
23-
phpt_notify();
22+
$server = stream_socket_server('tls://127.0.0.1:0', $errno, $errstr, $flags, $ctx);
23+
phpt_notify_server_start($server);
2424
@stream_socket_accept($server, 3);
2525
CODE;
2626
$serverCode = sprintf($serverCode, $certFile);
@@ -33,9 +33,7 @@ $clientCode = <<<'CODE'
3333
'security_level' => 1,
3434
]]);
3535
36-
phpt_wait();
37-
38-
$client = stream_socket_client("tls://127.0.0.1:64321", $errno, $errstr, 3, $flags, $ctx);
36+
$client = stream_socket_client("tls://{{ ADDR }}", $errno, $errstr, 3, $flags, $ctx);
3937
var_dump($client);
4038
CODE;
4139

@@ -44,7 +42,7 @@ $certificateGenerator = new CertificateGenerator();
4442
$certificateGenerator->saveNewCertAsFileWithKey('bug62890', $certFile);
4543

4644
include 'ServerClientTestCase.inc';
47-
ServerClientTestCase::getInstance()->run($clientCode, $serverCode);
45+
ServerClientTestCase::getInstance()->run($clientCode, $serverCode, true);
4846
?>
4947
--CLEAN--
5048
<?php

ext/openssl/tests/bug65538_001.phpt

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -12,14 +12,14 @@ $certFile = __DIR__ . DIRECTORY_SEPARATOR . 'bug65538_001.pem.tmp';
1212
$cacertFile = __DIR__ . DIRECTORY_SEPARATOR . 'bug65538_001-ca.pem.tmp';
1313

1414
$serverCode = <<<'CODE'
15-
$serverUri = "ssl://127.0.0.1:64321";
15+
$serverUri = "ssl://127.0.0.1:0";
1616
$serverFlags = STREAM_SERVER_BIND | STREAM_SERVER_LISTEN;
1717
$serverCtx = stream_context_create(['ssl' => [
1818
'local_cert' => '%s',
1919
]]);
2020
2121
$server = stream_socket_server($serverUri, $errno, $errstr, $serverFlags, $serverCtx);
22-
phpt_notify();
22+
phpt_notify_server_start($server);
2323
2424
$client = @stream_socket_accept($server);
2525
if ($client) {
@@ -41,13 +41,12 @@ $serverCode = sprintf($serverCode, $certFile);
4141

4242
$peerName = 'bug65538_001';
4343
$clientCode = <<<'CODE'
44-
$serverUri = "https://127.0.0.1:64321/";
44+
$serverUri = "https://{{ ADDR }}/";
4545
$clientCtx = stream_context_create(['ssl' => [
4646
'cafile' => 'file://%s',
4747
'peer_name' => '%s',
4848
]]);
4949
50-
phpt_wait();
5150
$html = file_get_contents($serverUri, false, $clientCtx);
5251
5352
var_dump($html);
@@ -60,7 +59,7 @@ $certificateGenerator->saveCaCert($cacertFile);
6059
$certificateGenerator->saveNewCertAsFileWithKey($peerName, $certFile);
6160

6261
include 'ServerClientTestCase.inc';
63-
ServerClientTestCase::getInstance()->run($clientCode, $serverCode);
62+
ServerClientTestCase::getInstance()->run($clientCode, $serverCode, true);
6463
?>
6564
--CLEAN--
6665
<?php

ext/openssl/tests/bug65538_003.phpt

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -17,14 +17,14 @@ $cacertFile = 'bug65538_003-ca.pem';
1717
$cacertPhar = __DIR__ . DIRECTORY_SEPARATOR . 'bug65538_003-ca.phar.tmp';
1818

1919
$serverCode = <<<'CODE'
20-
$serverUri = "ssl://127.0.0.1:64321";
20+
$serverUri = "ssl://127.0.0.1:0";
2121
$serverFlags = STREAM_SERVER_BIND | STREAM_SERVER_LISTEN;
2222
$serverCtx = stream_context_create(['ssl' => [
2323
'local_cert' => '%s',
2424
]]);
2525
2626
$server = stream_socket_server($serverUri, $errno, $errstr, $serverFlags, $serverCtx);
27-
phpt_notify();
27+
phpt_notify_server_start($server);
2828
2929
$client = @stream_socket_accept($server);
3030
if ($client) {
@@ -46,13 +46,12 @@ $serverCode = sprintf($serverCode, $certFile);
4646

4747
$peerName = 'bug65538_003';
4848
$clientCode = <<<'CODE'
49-
$serverUri = "https://127.0.0.1:64321/";
49+
$serverUri = "https://{{ ADDR }}/";
5050
$clientCtx = stream_context_create(['ssl' => [
5151
'cafile' => 'phar://%s/%s',
5252
'peer_name' => '%s',
5353
]]);
5454
55-
phpt_wait();
5655
$html = file_get_contents($serverUri, false, $clientCtx);
5756
5857
var_dump($html);
@@ -67,7 +66,7 @@ $phar = new Phar($cacertPhar);
6766
$phar->addFromString($cacertFile, $certificateGenerator->getCaCert());
6867

6968
include 'ServerClientTestCase.inc';
70-
ServerClientTestCase::getInstance()->run($clientCode, $serverCode);
69+
ServerClientTestCase::getInstance()->run($clientCode, $serverCode, true);
7170
?>
7271
--CLEAN--
7372
<?php

ext/openssl/tests/bug65729.phpt

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -12,14 +12,14 @@ $certFile = __DIR__ . DIRECTORY_SEPARATOR . 'bug65729.pem.tmp';
1212
$cacertFile = __DIR__ . DIRECTORY_SEPARATOR . 'bug65729-ca.pem.tmp';
1313

1414
$serverCode = <<<'CODE'
15-
$serverUri = "ssl://127.0.0.1:64321";
15+
$serverUri = "ssl://127.0.0.1:0";
1616
$serverFlags = STREAM_SERVER_BIND | STREAM_SERVER_LISTEN;
1717
$serverCtx = stream_context_create(['ssl' => [
1818
'local_cert' => '%s'
1919
]]);
2020
2121
$server = stream_socket_server($serverUri, $errno, $errstr, $serverFlags, $serverCtx);
22-
phpt_notify();
22+
phpt_notify_server_start($server);
2323
2424
$expected_names = ['foo.test.com.sg', 'foo.test.com', 'FOO.TEST.COM', 'foo.bar.test.com'];
2525
foreach ($expected_names as $name) {
@@ -29,11 +29,9 @@ CODE;
2929
$serverCode = sprintf($serverCode, $certFile);
3030

3131
$clientCode = <<<'CODE'
32-
$serverUri = "ssl://127.0.0.1:64321";
32+
$serverUri = "ssl://{{ ADDR }}";
3333
$clientFlags = STREAM_CLIENT_CONNECT;
3434
35-
phpt_wait();
36-
3735
$expected_names = ['foo.test.com.sg', 'foo.test.com', 'FOO.TEST.COM', 'foo.bar.test.com'];
3836
foreach ($expected_names as $expected_name) {
3937
$clientCtx = stream_context_create(['ssl' => [
@@ -53,7 +51,7 @@ $certificateGenerator->saveCaCert($cacertFile);
5351
$certificateGenerator->saveNewCertAsFileWithKey('*.test.com', $certFile);
5452

5553
include 'ServerClientTestCase.inc';
56-
ServerClientTestCase::getInstance()->run($clientCode, $serverCode);
54+
ServerClientTestCase::getInstance()->run($clientCode, $serverCode, true);
5755
?>
5856
--CLEAN--
5957
<?php
@@ -65,7 +63,7 @@ Warning: stream_socket_client(): Peer certificate CN=`*.test.com' did not match
6563

6664
Warning: stream_socket_client(): Failed to enable crypto in %s on line %d
6765

68-
Warning: stream_socket_client(): Unable to connect to ssl://127.0.0.1:64321 (Unknown error) in %s on line %d
66+
Warning: stream_socket_client(): Unable to connect to ssl://127.0.0.1:%d (Unknown error) in %s on line %d
6967
bool(false)
7068
resource(%d) of type (stream)
7169
resource(%d) of type (stream)
@@ -74,5 +72,5 @@ Warning: stream_socket_client(): Peer certificate CN=`*.test.com' did not match
7472

7573
Warning: stream_socket_client(): Failed to enable crypto in %s on line %d
7674

77-
Warning: stream_socket_client(): Unable to connect to ssl://127.0.0.1:64321 (Unknown error) in %s on line %d
75+
Warning: stream_socket_client(): Unable to connect to ssl://127.0.0.1:%d (Unknown error) in %s on line %d
7876
bool(false)

0 commit comments

Comments
 (0)