]> granicus.if.org Git - php/commitdiff
Session regenerate id seems to malfunction with 3rd party session handlers
authorMikko <mikko@kuut.io>
Tue, 26 Jan 2016 03:34:19 +0000 (03:34 +0000)
committerYasuo Ohgaki <yohgaki@php.net>
Thu, 28 Jan 2016 04:30:10 +0000 (13:30 +0900)
Fixed bug #71472 session_regenerate_id malfunctions with certain session handlers

ext/session/session.c

index 22a7ec125d033822d50ec30c4bddbcb7a92d13e2..d5e94b98ba484f8ef192409d659a54735b152b10 100644 (file)
@@ -2102,15 +2102,18 @@ static PHP_FUNCTION(session_regenerate_id)
                PS(session_vars) = NULL;
        }
        zend_string_release(PS(id));
-       PS(id) = PS(mod)->s_create_sid(&PS(mod_data));
-       if (!PS(id)) {
+       PS(id) = NULL;
+
+       if (PS(mod)->s_open(&PS(mod_data), PS(save_path), PS(session_name)) == FAILURE) {
                PS(session_status) = php_session_none;
-               php_error_docref(NULL, E_RECOVERABLE_ERROR, "Failed to create new session ID: %s (path: %s)", PS(mod)->s_name, PS(save_path));
+               php_error_docref(NULL, E_RECOVERABLE_ERROR, "Failed to create(open) session ID: %s (path: %s)", PS(mod)->s_name, PS(save_path));
                RETURN_FALSE;
        }
-       if (PS(mod)->s_open(&PS(mod_data), PS(save_path), PS(session_name)) == FAILURE) {
+
+       PS(id) = PS(mod)->s_create_sid(&PS(mod_data));
+       if (!PS(id)) {
                PS(session_status) = php_session_none;
-               php_error_docref(NULL, E_RECOVERABLE_ERROR, "Failed to create(open) session ID: %s (path: %s)", PS(mod)->s_name, PS(save_path));
+               php_error_docref(NULL, E_RECOVERABLE_ERROR, "Failed to create new session ID: %s (path: %s)", PS(mod)->s_name, PS(save_path));
                RETURN_FALSE;
        }
        if (PS(use_strict_mode) && PS(mod)->s_validate_sid &&