summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristoph M. Becker <cmbecker69@gmx.de>2020-01-21 16:19:04 +0100
committerChristoph M. Becker <cmbecker69@gmx.de>2020-01-21 16:20:04 +0100
commit16a8a608d5c1ae12320d361d0a828bbccd52680d (patch)
tree442fb36f99725b8160275c24c513ca1167df23e4
parentb0f8d38f4acd790100ece0bc6e33818d13fd44a2 (diff)
parent9eff906a024578f0ea0bf8b4e318544d70074537 (diff)
downloadphp-git-16a8a608d5c1ae12320d361d0a828bbccd52680d.tar.gz
Merge branch 'PHP-7.3' into PHP-7.4
* PHP-7.3: Fix #79145: openssl memory leak
-rw-r--r--NEWS3
-rw-r--r--ext/openssl/openssl.c2
-rw-r--r--ext/openssl/tests/bug79145.phpt26
3 files changed, 29 insertions, 2 deletions
diff --git a/NEWS b/NEWS
index 515403ebc2..2f59ce7987 100644
--- a/NEWS
+++ b/NEWS
@@ -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)