]> granicus.if.org Git - php/commitdiff
Fixed #74099 - Memory leak with openssl_encrypt()
authorandrewnester <andrew.nester.dev@gmail.com>
Fri, 17 Feb 2017 09:33:35 +0000 (12:33 +0300)
committerNikita Popov <nikita.ppv@gmail.com>
Fri, 17 Feb 2017 20:23:16 +0000 (21:23 +0100)
NEWS
ext/openssl/openssl.c
ext/openssl/tests/bug74099.phpt [new file with mode: 0644]

diff --git a/NEWS b/NEWS
index 8f0fb75e903a789d17a2ca7328e3455daa880b60..c988fa0f318e2898478f8a0b5cb7054c790015c5 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -42,6 +42,7 @@ PHP                                                                        NEWS
 - OpenSSL:
   . Fixed bug #74022 (PHP Fast CGI crashes when reading from a pfx file).
     (Anatol)
+  . Fixed bug #74099 (Memory leak with openssl_encrypt()). (Andrew Nester)
 
 - Standard:
   . Fixed bug #74005 (mail.add_x_header causes RFC-breaking lone line feed).
index 8de329aec7b84d623b705164bb5b7e9c9b8e6c2a..c1b433eb93420156d6a7010eb1281336d7abf9c2 100644 (file)
@@ -6309,8 +6309,7 @@ static int php_openssl_cipher_update(const EVP_CIPHER *cipher_type,
 
        *poutbuf = zend_string_alloc((int)data_len + EVP_CIPHER_block_size(cipher_type), 0);
 
-       if ((!enc || data_len > 0) &&
-                       !EVP_CipherUpdate(cipher_ctx, (unsigned char*)ZSTR_VAL(*poutbuf),
+       if (!EVP_CipherUpdate(cipher_ctx, (unsigned char*)ZSTR_VAL(*poutbuf),
                                        &i, (unsigned char *)data, (int)data_len)) {
                /* we don't show warning when we fail but if we ever do, then it should look like this:
                if (mode->is_single_run_aead && !enc) {
@@ -6366,7 +6365,6 @@ PHP_FUNCTION(openssl_encrypt)
                php_error_docref(NULL, E_WARNING, "Failed to create cipher context");
                RETURN_FALSE;
        }
-
        php_openssl_load_cipher_mode(&mode, cipher_type);
 
        if (php_openssl_cipher_init(cipher_type, cipher_ctx, &mode,
diff --git a/ext/openssl/tests/bug74099.phpt b/ext/openssl/tests/bug74099.phpt
new file mode 100644 (file)
index 0000000..c0e02ba
--- /dev/null
@@ -0,0 +1,20 @@
+--TEST--
+Bug #74099 Memory leak with openssl_encrypt()
+--SKIPIF--
+<?php
+if (!extension_loaded("openssl")) die("skip");
+?>
+--FILE--
+<?php
+$aad = random_bytes(32);
+$iv = random_bytes(16);
+$key = random_bytes(32);
+
+$plaintext = '';
+$tag = null;
+
+$ciphertext = openssl_encrypt($plaintext, 'aes-256-gcm', $key, \OPENSSL_RAW_DATA, $iv, $tag, $aad);
+var_dump($ciphertext);
+?>
+--EXPECTF--
+string(0) ""