Skip to content

Commit 657a832

Browse files
committed
Fixed bug #79881
1 parent 973be68 commit 657a832

File tree

3 files changed

+52
-4
lines changed

3 files changed

+52
-4
lines changed

NEWS

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,9 @@ PHP NEWS
4141
- Mbstring:
4242
. Fixed bug #79787 (mb_strimwidth does not trim string). (XXiang)
4343

44+
- OpenSSL:
45+
. Fixed bug #79881 (Memory leak in openssl_pkey_get_public()). (Nikita)
46+
4447
- Reflection:
4548
. Fixed bug #79487 (::getStaticProperties() ignores property modifications).
4649
(cmb, Nikita)

ext/openssl/openssl.c

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3860,10 +3860,6 @@ static EVP_PKEY * php_openssl_evp_from_zval(
38603860
if (!what) {
38613861
TMP_CLEAN;
38623862
}
3863-
if (resourceval) {
3864-
*resourceval = res;
3865-
Z_ADDREF_P(val);
3866-
}
38673863
if (res->type == le_x509) {
38683864
/* extract key from cert, depending on public_key param */
38693865
cert = (X509*)what;
@@ -3887,6 +3883,10 @@ static EVP_PKEY * php_openssl_evp_from_zval(
38873883
zval_ptr_dtor_str(&tmp);
38883884
}
38893885
/* got the key - return it */
3886+
if (resourceval) {
3887+
*resourceval = res;
3888+
Z_ADDREF_P(val);
3889+
}
38903890
return (EVP_PKEY*)what;
38913891
}
38923892
} else {

ext/openssl/tests/bug79881.phpt

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
--TEST--
2+
Bug #79881: Memory leak in openssl_pkey_get_public()
3+
--FILE--
4+
<?php
5+
6+
$cert = "-----BEGIN CERTIFICATE-----
7+
MIIE4jCCAsqgAwIBAgIHBZCisfbbfTANBgkqhkiG9w0BAQUFADB/MQswCQYDVQQG
8+
EwJHQjEPMA0GA1UECAwGTG9uZG9uMRcwFQYDVQQKDA5Hb29nbGUgVUsgTHRkLjEh
9+
MB8GA1UECwwYQ2VydGlmaWNhdGUgVHJhbnNwYXJlbmN5MSMwIQYDVQQDDBpNZXJn
10+
ZSBEZWxheSBJbnRlcm1lZGlhdGUgMTAeFw0xOTA4MjExNjAyMDhaFw0yMjEwMTMw
11+
NTQ0MjdaMHUxCzAJBgNVBAYTAkdCMQ8wDQYDVQQHDAZMb25kb24xOjA4BgNVBAoM
12+
MUdvb2dsZSBDZXJ0aWZpY2F0ZSBUcmFuc3BhcmVuY3kgKFByZWNlcnQgU2lnbmlu
13+
ZykxGTAXBgNVBAUTEDE1NjY0MDMzMjg0MDAyNTMwggEiMA0GCSqGSIb3DQEBAQUA
14+
A4IBDwAwggEKAoIBAQDdr1pIlcp/wH42Yb/kxiyx06DKKUO3vZj1Zx7W0kGOPlfP
15+
KroFcSLbCxnrzm1iENVbflBcbeGY1hF3c5cDxs/6bh88Y/5gA1rhP0q1c02Y9yPN
16+
Yo+pi6vfJK41CwsMHTie0U01Ghynzy/683+5tpigp2MccsrPFi5Sk7WMgR78Y6dt
17+
oEH9KZtdbuBlUzyEjnDzR5F7UB3YtrYVOKeYlsYEDmgLZKSMtP9M7/XIc8kUqT1L
18+
VDcB/kk46plGV0b93P+HSPdQcqAUIoqa/zmDnR8XZZGShg1OyJPhB75xCahMr6wL
19+
aXyEFtOwgjDnUZIb5DgpUVwHBq4Xw3QYYmtjk7eVAgMBAAGjbTBrMBgGA1UdJQEB
20+
/wQOMAwGCisGAQQB1nkCBAQwDwYDVR0TAQH/BAUwAwEB/zAfBgNVHSMEGDAWgBTp
21+
PAThgC/ChBMtJnCe8v0az6r+xjAdBgNVHQ4EFgQUq3H778kIPz+bmq6to3MFNtGz
22+
qeQwDQYJKoZIhvcNAQEFBQADggIBACYc4ubDw8J7g+AYIS42K2RH/AZ5pf9KAZ+C
23+
OyFkZ5/LV3gNn1CAKFDOyjrGNA6r2yyHZ8TqyKguZqpFLVf1Vn7ll8u38hp7mBFO
24+
/bZGnCdZTtW8Ae8zNQXuFbXoItCk6unGPQsp7/5mHD8nsrqO512zEHuPA+b3v/ZR
25+
tSwkaJZM3W4LhHWiplEoA0F9CCnBKB1W00LDMZTLa4CRdGJlrjwchG0No+ItGrXZ
26+
cc+wLMic6UZ1QrXcvo9efj6/bjLHTee39u4SlIcuL20x97993HZyqP5ZSi+QkKfr
27+
Af441uJNHOFmoClCo6Wb2quNn6F6GvhYxkYcy/CgVP+VOfUBPIF8Ta2KrcI46fAL
28+
Qq6d/SK0GtjlRZME8h48tocBCGvtcZwmZnOQDLd3M51rmfXKB/6y70PjJqiX9ExR
29+
CJzpfafv1OaOqtWre6UofQsEx+jP+P7iGqQo+W9XrufnE7IDso+Za98G5cUIj61a
30+
U6sTKt8w+Ovkxr3UyC/QHdYYJ7nYQfrJ2ml9aAzs1ZlNS8YS0XXpzmpaZhSuhbfM
31+
F6F0Drg3+os4hVFiimUOjspZ4Su2EpsG86hdqJ/HHxTPPfgVlbBP0mexaRco3KVv
32+
pgJ4B+Hh5oOOh9TkR+D3ZKzjc6G2+4nhflYjI AD7B080Jshk6TcII1twXD9qBkvm
33+
9J3nrHWc
34+
-----END CERTIFICATE-----";
35+
36+
$mem1 = memory_get_usage();
37+
$read = openssl_x509_read($cert);
38+
$key = openssl_pkey_get_public($read);
39+
unset($read, $key);
40+
$mem2 = memory_get_usage();
41+
var_dump($mem1 == $mem2);
42+
43+
?>
44+
--EXPECT--
45+
bool(true)

0 commit comments

Comments
 (0)