diff options
author | Christoph M. Becker <cmbecker69@gmx.de> | 2020-01-21 16:19:04 +0100 |
---|---|---|
committer | Christoph M. Becker <cmbecker69@gmx.de> | 2020-01-21 16:20:04 +0100 |
commit | 16a8a608d5c1ae12320d361d0a828bbccd52680d (patch) | |
tree | 442fb36f99725b8160275c24c513ca1167df23e4 | |
parent | b0f8d38f4acd790100ece0bc6e33818d13fd44a2 (diff) | |
parent | 9eff906a024578f0ea0bf8b4e318544d70074537 (diff) | |
download | php-git-16a8a608d5c1ae12320d361d0a828bbccd52680d.tar.gz |
Merge branch 'PHP-7.3' into PHP-7.4
* PHP-7.3:
Fix #79145: openssl memory leak
-rw-r--r-- | NEWS | 3 | ||||
-rw-r--r-- | ext/openssl/openssl.c | 2 | ||||
-rw-r--r-- | ext/openssl/tests/bug79145.phpt | 26 |
3 files changed, 29 insertions, 2 deletions
@@ -24,6 +24,9 @@ PHP NEWS . Fixed #79114 (Eval class during preload causes class to be only half available). (Laruence) +- OpenSSL: + . Fixed bug #79145 (openssl memory leak). (cmb, Nikita) + - Reflection: . Fixed bug #79115 (ReflectionClass::isCloneable call reflected class __destruct). (Nikita) diff --git a/ext/openssl/openssl.c b/ext/openssl/openssl.c index f566d4e6ed..04cb9b0f23 100644 --- a/ext/openssl/openssl.c +++ b/ext/openssl/openssl.c @@ -4767,7 +4767,6 @@ PHP_FUNCTION(openssl_pkey_get_public) RETURN_FALSE; } ZVAL_RES(return_value, res); - Z_ADDREF_P(return_value); } /* }}} */ @@ -4809,7 +4808,6 @@ PHP_FUNCTION(openssl_pkey_get_private) RETURN_FALSE; } ZVAL_RES(return_value, res); - Z_ADDREF_P(return_value); } /* }}} */ diff --git a/ext/openssl/tests/bug79145.phpt b/ext/openssl/tests/bug79145.phpt new file mode 100644 index 0000000000..348831189b --- /dev/null +++ b/ext/openssl/tests/bug79145.phpt @@ -0,0 +1,26 @@ +--TEST-- +Bug #79145 (openssl memory leak) +--SKIPIF-- +<?php +if (!extension_loaded('openssl')) die('skip openssl extension not available'); +if (getenv('SKIP_SLOW_TESTS')) die('skip slow test'); +?> +--FILE-- +<?php +$b = '-----BEGIN PUBLIC KEY----- +MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDaFhc31WeskqxwI+Si5R/fZrLK +pJOlABiI3RZfKCHJVrXl3IvcHDFM/BHKUJoSi/ee8GS9iw0G4Z1eCzJdthXxHARh +j85Q5OliVxOdB1LoTOsOmfFf/fdvpU3DsOWsDKlVrL41MHxXorwrwOiys/r/gv2d +C9C4JmhTOjBVAK8SewIDAQAC +-----END PUBLIC KEY-----'; + +$start = memory_get_usage(true); +for ($i = 0; $i < 100000; $i++) { + $a = openssl_get_publickey($b); + openssl_free_key($a); +} +$end = memory_get_usage(true); +var_dump($end <= 1.1 * $start); +?> +--EXPECT-- +bool(true) |