]> granicus.if.org Git - php/commitdiff
fix the mcrypt related part of bug #64833
authorAnatol Belski <ab@php.net>
Sun, 9 Aug 2015 16:40:29 +0000 (18:40 +0200)
committerAnatol Belski <ab@php.net>
Sun, 9 Aug 2015 16:40:29 +0000 (18:40 +0200)
ext/mcrypt/mcrypt.c

index f9cc076d0d60bcf476650f5b024b3430b65a754e..4c8f3a2d0529139297a58ccce0544151e5a435d8 100644 (file)
@@ -251,6 +251,8 @@ const zend_function_entry mcrypt_functions[] = { /* {{{ */
 static PHP_MINFO_FUNCTION(mcrypt);
 static PHP_MINIT_FUNCTION(mcrypt);
 static PHP_MSHUTDOWN_FUNCTION(mcrypt);
+static PHP_GINIT_FUNCTION(mcrypt);
+static PHP_GSHUTDOWN_FUNCTION(mcrypt);
 
 ZEND_DECLARE_MODULE_GLOBALS(mcrypt)
 
@@ -263,8 +265,8 @@ zend_module_entry mcrypt_module_entry = {
        PHP_MINFO(mcrypt),
        PHP_MCRYPT_VERSION,
        PHP_MODULE_GLOBALS(mcrypt),
-       NULL,
-       NULL,
+       PHP_GINIT(mcrypt),
+       PHP_GSHUTDOWN(mcrypt),
        NULL,
        STANDARD_MODULE_PROPERTIES_EX
 };
@@ -346,6 +348,25 @@ static void php_mcrypt_module_dtor(zend_resource *rsrc) /* {{{ */
 }
 /* }}} */
 
+static PHP_GINIT_FUNCTION(mcrypt)
+{
+       mcrypt_globals->fd[RANDOM] = -1;
+       mcrypt_globals->fd[URANDOM] = -1;
+}
+
+static PHP_GSHUTDOWN_FUNCTION(mcrypt)
+{
+       if (mcrypt_globals->fd[RANDOM] >= 0) {
+               close(mcrypt_globals->fd[RANDOM]);
+               mcrypt_globals->fd[RANDOM] = -1;
+       }
+
+       if (mcrypt_globals->fd[URANDOM] >= 0) {
+               close(mcrypt_globals->fd[URANDOM]);
+               mcrypt_globals->fd[URANDOM] = -1;
+       }
+}
+
 static PHP_MINIT_FUNCTION(mcrypt) /* {{{ */
 {
        le_mcrypt = zend_register_list_destructors_ex(php_mcrypt_module_dtor, NULL, "mcrypt", module_number);
@@ -403,9 +424,6 @@ static PHP_MINIT_FUNCTION(mcrypt) /* {{{ */
        php_stream_filter_register_factory("mcrypt.*", &php_mcrypt_filter_factory);
        php_stream_filter_register_factory("mdecrypt.*", &php_mcrypt_filter_factory);
 
-       MCG(fd[RANDOM]) = -1;
-       MCG(fd[URANDOM]) = -1;
-
        return SUCCESS;
 }
 /* }}} */
@@ -415,14 +433,6 @@ static PHP_MSHUTDOWN_FUNCTION(mcrypt) /* {{{ */
        php_stream_filter_unregister_factory("mcrypt.*");
        php_stream_filter_unregister_factory("mdecrypt.*");
 
-       if (MCG(fd[RANDOM]) > 0) {
-               close(MCG(fd[RANDOM]));
-       }
-
-       if (MCG(fd[URANDOM]) > 0) {
-               close(MCG(fd[URANDOM]));
-       }
-
        UNREGISTER_INI_ENTRIES();
        return SUCCESS;
 }