From 856c9fa57bbd37ad3c69ac01f2e7183e07eff35e Mon Sep 17 00:00:00 2001 From: Derick Rethans Date: Sat, 15 Dec 2001 13:17:55 +0000 Subject: [PATCH] - Fix for bug 14162, invalidate the resource then mcrypt_generic_init fails --- ext/mcrypt/mcrypt.c | 23 ++++++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) diff --git a/ext/mcrypt/mcrypt.c b/ext/mcrypt/mcrypt.c index b42bad8fec..6f8dbfe420 100644 --- a/ext/mcrypt/mcrypt.c +++ b/ext/mcrypt/mcrypt.c @@ -464,6 +464,7 @@ PHP_FUNCTION(mcrypt_generic_init) int max_key_size, key_size, iv_size; MCRYPT td; int argc; + int result = 0; argc = ZEND_NUM_ARGS(); MCRYPT_CHECK_PARAM_COUNT (3,3) @@ -503,7 +504,27 @@ PHP_FUNCTION(mcrypt_generic_init) } memcpy (iv_s, Z_STRVAL_PP(iv), iv_size); - RETVAL_LONG (mcrypt_generic_init (td, key_s, key_size, iv_s)); + result = mcrypt_generic_init (td, key_s, key_size, iv_s); + + /* If this function fails, close the mcrypt module to prevent crashes + * when further functions want to access this resource */ + if (result < 0) { + zend_list_delete (Z_LVAL_PP(mcryptind)); + switch (result) { + case -3: + php_error (E_WARNING, "mcrypt_generic_init: Key length incorrect"); + break; + case -4: + php_error (E_WARNING, "mcrypt_generic_init: Memory allocation error"); + break; + case -1: + default: + php_error (E_WARNING, "mcrypt_generic_init: Unknown error"); + break; + } + } + RETVAL_LONG (result); + efree (iv_s); efree (key_s); } -- 2.50.1