Skip to content

Commit 569a489

Browse files
committed
- MFH: #46127, php_openssl_tcp_sockop_accept forgets to set context on accepted stream
1 parent 4907fae commit 569a489

File tree

3 files changed

+91
-0
lines changed

3 files changed

+91
-0
lines changed

ext/openssl/tests/bug46127.pem

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
-----BEGIN CERTIFICATE-----
2+
MIIC5jCCAk+gAwIBAgIBADANBgkqhkiG9w0BAQQFADBcMQswCQYDVQQGEwJBVTET
3+
MBEGA1UECBMKUXVlZW5zbGFuZDEaMBgGA1UEChMRQ3J5cHRTb2Z0IFB0eSBMdGQx
4+
HDAaBgNVBAMTE1Rlc3QgUENBICgxMDI0IGJpdCkwHhcNOTkxMjAyMjEzNTQ4WhcN
5+
MDUwNzExMjEzNTQ4WjBcMQswCQYDVQQGEwJBVTETMBEGA1UECBMKUXVlZW5zbGFu
6+
ZDEaMBgGA1UEChMRQ3J5cHRTb2Z0IFB0eSBMdGQxHDAaBgNVBAMTE1Rlc3QgUENB
7+
ICgxMDI0IGJpdCkwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAJ2haT/f5Zwy
8+
V+MiuSDjSR62adBoSiBB7Usty44lXqsp9RICw+DCCxpsn/CfxPEDXLLd4olsWXc6
9+
JRcxGynbYmnzk+Z6aIPPJQhK3CTvaqGnWKZsA1m+WaUIUqJCuNTK4N+7hMAGaf6S
10+
S3e9HVgEQ4a34gXJ7VQFVIBNV1EnZRWHAgMBAAGjgbcwgbQwHQYDVR0OBBYEFE0R
11+
aEcrj18q1dw+G6nJbsTWR213MIGEBgNVHSMEfTB7gBRNEWhHK49fKtXcPhupyW7E
12+
1kdtd6FgpF4wXDELMAkGA1UEBhMCQVUxEzARBgNVBAgTClF1ZWVuc2xhbmQxGjAY
13+
BgNVBAoTEUNyeXB0U29mdCBQdHkgTHRkMRwwGgYDVQQDExNUZXN0IFBDQSAoMTAy
14+
NCBiaXQpggEAMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEEBQADgYEAUa8B3pho
15+
+Mvxeq9HsEzJxHIFQla05S5J/e/V+DQTYoKiRFchKPrDAdrzYSEvP3h4QJEtsNqQ
16+
JfOxg5M42uLFq7aPGWkF6ZZqZsYS+zA9IVT14g7gNA6Ne+5QtJqQtH9HA24st0T0
17+
Tga/lZ9M2ovImovaxSL/kRHbpCWcqWVxpOw=
18+
-----END CERTIFICATE-----
19+
-----BEGIN RSA PRIVATE KEY-----
20+
MIICXAIBAAKBgQCdoWk/3+WcMlfjIrkg40ketmnQaEogQe1LLcuOJV6rKfUSAsPg
21+
wgsabJ/wn8TxA1yy3eKJbFl3OiUXMRsp22Jp85PmemiDzyUIStwk72qhp1imbANZ
22+
vlmlCFKiQrjUyuDfu4TABmn+kkt3vR1YBEOGt+IFye1UBVSATVdRJ2UVhwIDAQAB
23+
AoGAba4fTtuap5l7/8ZsbE7Z1O32KJY4ZcOZukLOLUUhXxXduT+FTgGWujc0/rgc
24+
z9qYCLlNZHOouMYTgtSfYvuMuLZ11VIt0GYH+nRioLShE59Yy+zCRyC+gPigS1kz
25+
xvo14AsOIPYV14Tk/SsHyq6E0eTk7VzaIE197giiINUERPECQQDSKmtPTh/lRKw7
26+
HSZSM0I1mFWn/1zqrAbontRQY5w98QWIOe5qmzYyFbPXYT3d9BzlsMyhgiRNoBbD
27+
yvohSHXJAkEAwAHx6ezAZeWWzD5yXD36nyjpkVCw7Tk7TSmOceLJMWt1QcrCfqlS
28+
xA5jjpQ6Z8suU5DdtWAryM2sAir1WisYzwJAd6Zcx56jvAQ3xcPXsE6scBTVFzrj
29+
7FqZ6E+cclPzfLQ+QQsyOBE7bpI6e/FJppY26XGZXo3YGzV8IGXrt40oOQJALETG
30+
h86EFXo3qGOFbmsDy4pdP5nBERCu8X1xUCSfintiD4c2DInxgS5oGclnJeMcjTvL
31+
QjQoJCX3UJCi/OUO1QJBAKgcDHWjMvt+l1pjJBsSEZ0HX9AAIIVx0RQmbFGS+F2Q
32+
hhu5l77WnnZOQ9vvhV5u7NPCUF9nhU3jh60qWWO8mkc=
33+
-----END RSA PRIVATE KEY-----

ext/openssl/tests/bug46127.phpt

Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
--TEST--
2+
openssl_sign/verify: accept different algos
3+
--SKIPIF--
4+
<?php
5+
if (!extension_loaded("openssl")) die("skip");
6+
if (OPENSSL_VERSION_NUMBER < 0x009070af) die("skip");
7+
?>
8+
--FILE--
9+
<?php
10+
11+
function ssl_server($port) {
12+
$pem = dirname(__FILE__) . '/bug46127.pem';
13+
$ssl = array(
14+
'verify_peer' => false,
15+
'allow_self_signed' => true,
16+
'local_cert' => $pem,
17+
// 'passphrase' => '',
18+
);
19+
$context = stream_context_create(array('ssl' => $ssl));
20+
$sock = stream_socket_server('ssl://127.0.0.1:'.$port, $errno, $errstr, STREAM_SERVER_BIND | STREAM_SERVER_LISTEN, $context);
21+
if (!$sock) return false;
22+
23+
$link = stream_socket_accept($sock);
24+
if (!$link) return false; // bad link?
25+
26+
fputs($link, "Sending bug 46127\n");
27+
28+
// close stuff
29+
fclose($link);
30+
fclose($sock);
31+
32+
exit;
33+
}
34+
35+
echo "Running bug46127\n";
36+
37+
$port = rand(15000, 32000);
38+
39+
$pid = pcntl_fork();
40+
if ($pid == 0) { // child
41+
ssl_server($port);
42+
exit;
43+
}
44+
45+
// client or failed
46+
sleep(1);
47+
$sock = fsockopen('ssl://127.0.0.1', $port, $errno, $errstr);
48+
if (!$sock) exit;
49+
50+
echo fgets($sock);
51+
52+
pcntl_waitpid($pid, $status);
53+
54+
?>
55+
--EXPECTF--
56+
Running bug46127
57+
Sending bug 46127

ext/openssl/xp_ssl.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -556,6 +556,7 @@ static inline int php_openssl_tcp_sockop_accept(php_stream *stream, php_openssl_
556556

557557
xparam->outputs.client = php_stream_alloc_rel(stream->ops, clisockdata, NULL, "r+");
558558
if (xparam->outputs.client) {
559+
xparam->outputs.client->context = stream->context;
559560
if (stream->context) {
560561
zend_list_addref(stream->context->rsrc_id);
561562
}

0 commit comments

Comments
 (0)