Skip to content

Commit 80b4d49

Browse files
committed
Merge branch 'PHP-7.4'
* PHP-7.4: Fixed bug #79881
2 parents 30073ac + 657a832 commit 80b4d49

File tree

2 files changed

+49
-4
lines changed

2 files changed

+49
-4
lines changed

ext/openssl/openssl.c

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3431,10 +3431,6 @@ static EVP_PKEY * php_openssl_evp_from_zval(
34313431
if (!what) {
34323432
TMP_CLEAN;
34333433
}
3434-
if (resourceval) {
3435-
*resourceval = res;
3436-
Z_ADDREF_P(val);
3437-
}
34383434
if (res->type == le_x509) {
34393435
/* extract key from cert, depending on public_key param */
34403436
cert = (X509*)what;
@@ -3458,6 +3454,10 @@ static EVP_PKEY * php_openssl_evp_from_zval(
34583454
zval_ptr_dtor_str(&tmp);
34593455
}
34603456
/* got the key - return it */
3457+
if (resourceval) {
3458+
*resourceval = res;
3459+
Z_ADDREF_P(val);
3460+
}
34613461
return (EVP_PKEY*)what;
34623462
}
34633463
} 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)