]> granicus.if.org Git - php/commitdiff
Another setting leak in session code (bug #27963).
authorIlia Alshanetsky <iliaa@php.net>
Tue, 13 Apr 2004 18:18:22 +0000 (18:18 +0000)
committerIlia Alshanetsky <iliaa@php.net>
Tue, 13 Apr 2004 18:18:22 +0000 (18:18 +0000)
ext/session/session.c

index cc148e5bbfbdf111f86e1e1860cc1a403103d9aa..4ebc0afc5d0343a62a15b30263f9203c5c37e0ef 100644 (file)
@@ -1285,32 +1285,28 @@ PHP_FUNCTION(session_module_name)
 {
        zval **p_name;
        int ac = ZEND_NUM_ARGS();
-       char *old;
 
        if (ac < 0 || ac > 1 || zend_get_parameters_ex(ac, &p_name) == FAILURE)
                WRONG_PARAM_COUNT;
-       
-       old = safe_estrdup(PS(mod)->s_name);
 
        if (ac == 1) {
-               ps_module *tempmod;
-
                convert_to_string_ex(p_name);
-               tempmod = _php_find_ps_module(Z_STRVAL_PP(p_name) TSRMLS_CC);
-               if (tempmod) {
-                       if (PS(mod_data))
-                               PS(mod)->s_close(&PS(mod_data) TSRMLS_CC);
-                       PS(mod) = tempmod;
-                       PS(mod_data) = NULL;
-               } else {
-                       efree(old);
+               if (!_php_find_ps_module(Z_STRVAL_PP(p_name) TSRMLS_CC)) {
                        php_error_docref(NULL TSRMLS_CC, E_ERROR, "Cannot find named PHP session module (%s)",
                                        Z_STRVAL_PP(p_name));
                        RETURN_FALSE;
                }
-       }
+               if (PS(mod_data)) {
+                       PS(mod)->s_close(&PS(mod_data) TSRMLS_CC);
+               }
+               PS(mod_data) = NULL;
 
-       RETVAL_STRING(old, 0);
+               RETVAL_STRING(safe_estrdup(PS(mod)->s_name), 0);
+
+               zend_alter_ini_entry("session.save_handler", sizeof("session.save_handler"), Z_STRVAL_PP(p_name), Z_STRLEN_PP(p_name), PHP_INI_USER, PHP_INI_STAGE_RUNTIME);
+       } else {
+               RETURN_STRING(safe_estrdup(PS(mod)->s_name), 0);
+       }
 }
 /* }}} */