]> granicus.if.org Git - php/commitdiff
Call mcrypt_module_close on error
authorNikita Popov <nikic@php.net>
Sun, 2 Mar 2014 22:26:46 +0000 (23:26 +0100)
committerNikita Popov <nikic@php.net>
Wed, 5 Mar 2014 14:32:32 +0000 (15:32 +0100)
ext/mcrypt/mcrypt.c

index a9f34d77f58357d61031dd000dcd142d533e0b08..a8dbc4203ab4d4775eca17ced9d5818e808f9eab 100644 (file)
@@ -1268,6 +1268,7 @@ static void php_mcrypt_do_crypt(char* cipher, const char *key, int key_len, cons
 
        /* Checking for key-length */
        if (php_mcrypt_ensure_valid_key_size(td, key_len TSRMLS_CC) == FAILURE) {
+               mcrypt_module_close(td);
                RETURN_FALSE;
        }
        
@@ -1275,11 +1276,13 @@ static void php_mcrypt_do_crypt(char* cipher, const char *key, int key_len, cons
        if (mcrypt_enc_mode_has_iv(td) == 1) {
                if (!iv) {
                        php_error_docref(NULL TSRMLS_CC, E_WARNING, "Encryption mode requires an initialization vector");
+                       mcrypt_module_close(td);
                        RETURN_FALSE;
                }
 
                if (iv_len != mcrypt_enc_get_iv_size(td)) {
                        php_error_docref(NULL TSRMLS_CC, E_WARNING, MCRYPT_IV_WRONG_SIZE);
+                       mcrypt_module_close(td);
                        RETURN_FALSE;
                }
        }
@@ -1299,6 +1302,7 @@ static void php_mcrypt_do_crypt(char* cipher, const char *key, int key_len, cons
 
        if (mcrypt_generic_init(td, (void *) key, key_len, (void *) iv) < 0) {
                php_error_docref(NULL TSRMLS_CC, E_RECOVERABLE_ERROR, "Mcrypt initialisation failed");
+               mcrypt_module_close(td);
                RETURN_FALSE;
        }