]> granicus.if.org Git - php/commitdiff
Drop usage of E_RECOVERABLE_ERROR in Session extension
authorGeorge Peter Banyard <girgias@php.net>
Tue, 22 Sep 2020 17:32:21 +0000 (18:32 +0100)
committerGeorge Peter Banyard <girgias@php.net>
Tue, 22 Sep 2020 18:11:30 +0000 (19:11 +0100)
ext/session/session.c
ext/session/tests/bug60860.phpt
ext/session/tests/bug73100.phpt
ext/session/tests/error_when_setting_save_handler_ini_setting_in_runtime.phpt [new file with mode: 0644]
ext/session/tests/session_set_save_handler_class_014.phpt

index 79b82f90f786ffc27e4c789ea2204e24e7855842..bf05a547acc3587db233fa302b19b3c533aeb95e 100644 (file)
@@ -536,21 +536,18 @@ static void php_session_normalize_vars() /* {{{ */
 static PHP_INI_MH(OnUpdateSaveHandler) /* {{{ */
 {
        const ps_module *tmp;
+       int err_type = E_ERROR;
 
        SESSION_CHECK_ACTIVE_STATE;
        SESSION_CHECK_OUTPUT_STATE;
 
        tmp = _php_find_ps_module(ZSTR_VAL(new_value));
 
-       if (PG(modules_activated) && !tmp) {
-               int err_type;
-
-               if (stage == ZEND_INI_STAGE_RUNTIME) {
-                       err_type = E_WARNING;
-               } else {
-                       err_type = E_ERROR;
-               }
+       if (stage == ZEND_INI_STAGE_RUNTIME) {
+               err_type = E_WARNING;
+       }
 
+       if (PG(modules_activated) && !tmp) {
                /* Do not output error when restoring ini options. */
                if (stage != ZEND_INI_STAGE_DEACTIVATE) {
                        php_error_docref(NULL, err_type, "Session save handler \"%s\" cannot be found", ZSTR_VAL(new_value));
@@ -561,7 +558,7 @@ static PHP_INI_MH(OnUpdateSaveHandler) /* {{{ */
 
        /* "user" save handler should not be set by user */
        if (!PS(set_handler) &&  tmp == ps_user_ptr) {
-               php_error_docref(NULL, E_RECOVERABLE_ERROR, "Session save handler \"user\" cannot be set by ini_set() or session_module_name()");
+               php_error_docref(NULL, err_type, "Session save handler \"user\" cannot be set by ini_set()");
                return FAILURE;
        }
 
@@ -1917,6 +1914,10 @@ PHP_FUNCTION(session_module_name)
        }
 
        if (name) {
+               if (zend_string_equals_literal_ci(name, "user")) {
+                       zend_argument_value_error(1, "cannot be \"user\"");
+                       RETURN_THROWS();
+               }
                if (!_php_find_ps_module(ZSTR_VAL(name))) {
                        php_error_docref(NULL, E_WARNING, "Session handler module \"%s\" cannot be found", ZSTR_VAL(name));
 
index 487fba53074c6c72a29794d9c4139806189dd0a5..fbd8a6eeab9edb3cfa5405a40e17f830ecbd2fcd 100644 (file)
@@ -15,5 +15,5 @@ echo "ok\n";
 
 ?>
 --EXPECT--
-Recoverable fatal error: PHP Startup: Session save handler "user" cannot be set by ini_set() or session_module_name() in Unknown on line 0
+Fatal error: PHP Startup: Session save handler "user" cannot be set by ini_set() in Unknown on line 0
 ok
index a59e9f41cc1235a4d8d55717d486df3910e79915..a9c140aa88bd0cca23aa9aa314029a7d68616d0d 100644 (file)
@@ -14,7 +14,11 @@ var_dump(session_start());
 session_module_name("user");
 var_dump(session_destroy());
 
-session_module_name("user");
+try {
+    session_module_name("user");
+} catch (\ValueError $e) {
+    echo $e->getMessage() . \PHP_EOL;
+}
 ?>
 ===DONE===
 --EXPECTF--
@@ -22,5 +26,5 @@ bool(true)
 
 Warning: session_module_name(): Session save handler module cannot be changed when a session is active in %s on line %d
 bool(true)
-
-Recoverable fatal error: session_module_name(): Session save handler "user" cannot be set by ini_set() or session_module_name() in %s on line %d
+session_module_name(): Argument #1 ($module) cannot be "user"
+===DONE===
diff --git a/ext/session/tests/error_when_setting_save_handler_ini_setting_in_runtime.phpt b/ext/session/tests/error_when_setting_save_handler_ini_setting_in_runtime.phpt
new file mode 100644 (file)
index 0000000..f176a7a
--- /dev/null
@@ -0,0 +1,12 @@
+--TEST--
+Error when setting session.save_handler to user via ini_set
+--SKIPIF--
+<?php
+include('skipif.inc');
+?>
+--FILE--
+<?php
+ini_set('session.save_handler', 'user');
+?>
+--EXPECTF--
+Warning: ini_set(): Session save handler "user" cannot be set by ini_set() in %s on line %d
index 6eee4f8b6a31ff0360d46b437ba3343ed8d4414c..ff1b84a87e9d881daeb5acf59254b0c6734f7436 100644 (file)
@@ -21,5 +21,5 @@ session_set_save_handler($handler);
 session_start();
 ?>
 --EXPECT--
-Recoverable fatal error: PHP Startup: Session save handler "user" cannot be set by ini_set() or session_module_name() in Unknown on line 0
+Fatal error: PHP Startup: Session save handler "user" cannot be set by ini_set() in Unknown on line 0
 *** Testing session_set_save_handler() : calling default handler when save_handler=user ***