summaryrefslogtreecommitdiff
path: root/ext/session
diff options
context:
space:
mode:
authorGeorge Peter Banyard <girgias@php.net>2020-09-22 18:32:21 +0100
committerGeorge Peter Banyard <girgias@php.net>2020-09-22 19:11:30 +0100
commit82e14ff8e77cf818e3727b2efa46c0fc4e9db0dc (patch)
treea7d26d2e614c1330c7f5d82c61fbd79f61d7fc2f /ext/session
parent5d7d5e2773d140be3c31a27be45e89cae0d218e2 (diff)
downloadphp-git-82e14ff8e77cf818e3727b2efa46c0fc4e9db0dc.tar.gz
Drop usage of E_RECOVERABLE_ERROR in Session extension
Diffstat (limited to 'ext/session')
-rw-r--r--ext/session/session.c19
-rw-r--r--ext/session/tests/bug60860.phpt2
-rw-r--r--ext/session/tests/bug73100.phpt10
-rw-r--r--ext/session/tests/error_when_setting_save_handler_ini_setting_in_runtime.phpt12
-rw-r--r--ext/session/tests/session_set_save_handler_class_014.phpt2
5 files changed, 31 insertions, 14 deletions
diff --git a/ext/session/session.c b/ext/session/session.c
index 79b82f90f7..bf05a547ac 100644
--- a/ext/session/session.c
+++ b/ext/session/session.c
@@ -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));
diff --git a/ext/session/tests/bug60860.phpt b/ext/session/tests/bug60860.phpt
index 487fba5307..fbd8a6eeab 100644
--- a/ext/session/tests/bug60860.phpt
+++ b/ext/session/tests/bug60860.phpt
@@ -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
diff --git a/ext/session/tests/bug73100.phpt b/ext/session/tests/bug73100.phpt
index a59e9f41cc..a9c140aa88 100644
--- a/ext/session/tests/bug73100.phpt
+++ b/ext/session/tests/bug73100.phpt
@@ -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
index 0000000000..f176a7ae79
--- /dev/null
+++ b/ext/session/tests/error_when_setting_save_handler_ini_setting_in_runtime.phpt
@@ -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
diff --git a/ext/session/tests/session_set_save_handler_class_014.phpt b/ext/session/tests/session_set_save_handler_class_014.phpt
index 6eee4f8b6a..ff1b84a87e 100644
--- a/ext/session/tests/session_set_save_handler_class_014.phpt
+++ b/ext/session/tests/session_set_save_handler_class_014.phpt
@@ -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 ***