summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ext/session/mod_user.c82
-rw-r--r--ext/session/php_session.h1
-rw-r--r--ext/session/session.c3
-rw-r--r--ext/session/tests/bug60634.phpt16
-rw-r--r--ext/session/tests/bug60634_error_3.phpt3
-rw-r--r--ext/session/tests/bug60634_error_4.phpt2
6 files changed, 11 insertions, 96 deletions
diff --git a/ext/session/mod_user.c b/ext/session/mod_user.c
index 0a54204cc9..0cdbaf96f9 100644
--- a/ext/session/mod_user.c
+++ b/ext/session/mod_user.c
@@ -75,15 +75,7 @@ PS_OPEN_FUNC(user)
zval args[2];
STDVARS;
- if (PS(in_save_handler)) {
- PS(in_save_handler) = 0;
- php_error_docref(NULL, E_WARNING, "Cannot call save handler function recursive manner");
- return FAILURE;
- }
- PS(in_save_handler) = 1;
-
if (Z_ISUNDEF(PSF(open))) {
- PS(in_save_handler) = 0;
php_error_docref(NULL, E_WARNING,
"user session functions not defined");
@@ -96,7 +88,6 @@ PS_OPEN_FUNC(user)
zend_try {
ps_call_handler(&PSF(open), 2, args, &retval);
} zend_catch {
- PS(in_save_handler) = 0;
PS(session_status) = php_session_none;
if (!Z_ISUNDEF(retval)) {
zval_ptr_dtor(&retval);
@@ -106,7 +97,6 @@ PS_OPEN_FUNC(user)
PS(mod_user_implemented) = 1;
- PS(in_save_handler) = 0;
FINISH;
}
@@ -115,16 +105,8 @@ PS_CLOSE_FUNC(user)
zend_bool bailout = 0;
STDVARS;
- if (PS(in_save_handler)) {
- PS(in_save_handler) = 0;
- php_error_docref(NULL, E_WARNING, "Cannot call save handler function recursive manner");
- return FAILURE;
- }
- PS(in_save_handler) = 1;
-
if (!PS(mod_user_implemented)) {
/* already closed */
- PS(in_save_handler) = 0;
return SUCCESS;
}
@@ -137,14 +119,12 @@ PS_CLOSE_FUNC(user)
PS(mod_user_implemented) = 0;
if (bailout) {
- PS(in_save_handler) = 0;
if (!Z_ISUNDEF(retval)) {
zval_ptr_dtor(&retval);
}
zend_bailout();
}
- PS(in_save_handler) = 0;
FINISH;
}
@@ -153,13 +133,6 @@ PS_READ_FUNC(user)
zval args[1];
STDVARS;
- if (PS(in_save_handler)) {
- PS(in_save_handler) = 0;
- php_error_docref(NULL, E_WARNING, "Cannot call save handler function recursive manner");
- return FAILURE;
- }
- PS(in_save_handler) = 1;
-
ZVAL_STR_COPY(&args[0], key);
ps_call_handler(&PSF(read), 1, args, &retval);
@@ -172,7 +145,6 @@ PS_READ_FUNC(user)
zval_ptr_dtor(&retval);
}
- PS(in_save_handler) = 0;
return ret;
}
@@ -181,19 +153,11 @@ PS_WRITE_FUNC(user)
zval args[2];
STDVARS;
- if (PS(in_save_handler)) {
- PS(in_save_handler) = 0;
- php_error_docref(NULL, E_WARNING, "Cannot call save handler function recursive manner");
- return FAILURE;
- }
- PS(in_save_handler) = 1;
-
ZVAL_STR_COPY(&args[0], key);
ZVAL_STR_COPY(&args[1], val);
ps_call_handler(&PSF(write), 2, args, &retval);
- PS(in_save_handler) = 0;
FINISH;
}
@@ -202,18 +166,10 @@ PS_DESTROY_FUNC(user)
zval args[1];
STDVARS;
- if (PS(in_save_handler)) {
- PS(in_save_handler) = 0;
- php_error_docref(NULL, E_WARNING, "Cannot call save handler function recursive manner");
- return FAILURE;
- }
- PS(in_save_handler) = 1;
-
ZVAL_STR_COPY(&args[0], key);
ps_call_handler(&PSF(destroy), 1, args, &retval);
- PS(in_save_handler) = 0;
FINISH;
}
@@ -222,41 +178,24 @@ PS_GC_FUNC(user)
zval args[1];
zval retval;
- if (PS(in_save_handler)) {
- PS(in_save_handler) = 0;
- php_error_docref(NULL, E_WARNING, "Cannot call save handler function recursive manner");
- return FAILURE;
- }
- PS(in_save_handler) = 1;
-
ZVAL_LONG(&args[0], maxlifetime);
ps_call_handler(&PSF(gc), 1, args, &retval);
if (Z_TYPE(retval) == IS_LONG) {
convert_to_long(&retval);
- PS(in_save_handler) = 0;
return Z_LVAL(retval);
}
/* This is for older API compatibility */
if (Z_TYPE(retval) == IS_TRUE) {
- PS(in_save_handler) = 0;
return 1;
}
- PS(in_save_handler) = 0;
/* Anything else is some kind of error */
return -1; // Error
}
PS_CREATE_SID_FUNC(user)
{
- if (PS(in_save_handler)) {
- PS(in_save_handler) = 0;
- php_error_docref(NULL, E_WARNING, "Cannot call save handler function recursive manner");
- return FAILURE;
- }
- PS(in_save_handler) = 1;
-
/* maintain backwards compatibility */
if (!Z_ISUNDEF(PSF(create_sid))) {
zend_string *id = NULL;
@@ -270,35 +209,24 @@ PS_CREATE_SID_FUNC(user)
}
zval_ptr_dtor(&retval);
} else {
- PS(in_save_handler) = 0;
zend_throw_error(NULL, "No session id returned by function");
return NULL;
}
if (!id) {
- PS(in_save_handler) = 0;
zend_throw_error(NULL, "Session id must be a string");
return NULL;
}
- PS(in_save_handler) = 0;
return id;
}
- PS(in_save_handler) = 0;
/* function as defined by PS_MOD */
return php_session_create_id(mod_data);
}
PS_VALIDATE_SID_FUNC(user)
{
- if (PS(in_save_handler)) {
- PS(in_save_handler) = 0;
- php_error_docref(NULL, E_WARNING, "Cannot call save handler function recursive manner");
- return FAILURE;
- }
- PS(in_save_handler) = 1;
-
/* maintain backwards compatibility */
if (!Z_ISUNDEF(PSF(validate_sid))) {
zval args[1];
@@ -308,11 +236,9 @@ PS_VALIDATE_SID_FUNC(user)
ps_call_handler(&PSF(validate_sid), 1, args, &retval);
- PS(in_save_handler) = 0;
FINISH;
}
- PS(in_save_handler) = 0;
/* dummy function defined by PS_MOD */
return php_session_validate_sid(mod_data, key);
}
@@ -322,13 +248,6 @@ PS_UPDATE_TIMESTAMP_FUNC(user)
zval args[2];
STDVARS;
- if (PS(in_save_handler)) {
- PS(in_save_handler) = 0;
- php_error_docref(NULL, E_WARNING, "Cannot call save handler function recursive manner");
- return FAILURE;
- }
- PS(in_save_handler) = 1;
-
ZVAL_STR_COPY(&args[0], key);
ZVAL_STR_COPY(&args[1], val);
@@ -339,7 +258,6 @@ PS_UPDATE_TIMESTAMP_FUNC(user)
ps_call_handler(&PSF(write), 2, args, &retval);
}
- PS(in_save_handler) = 0;
FINISH;
}
diff --git a/ext/session/php_session.h b/ext/session/php_session.h
index 775527c2f6..da5e48515a 100644
--- a/ext/session/php_session.h
+++ b/ext/session/php_session.h
@@ -205,7 +205,6 @@ typedef struct _php_ps_globals {
zend_bool use_strict_mode; /* whether or not PHP accepts unknown session ids */
zend_bool lazy_write; /* omit session write when it is possible */
zend_string *session_vars; /* serialized original session data */
- zend_bool in_save_handler; /* state that if session is in save handler or not */
} php_ps_globals;
typedef php_ps_globals zend_ps_globals;
diff --git a/ext/session/session.c b/ext/session/session.c
index bbc531aa73..5484390c7e 100644
--- a/ext/session/session.c
+++ b/ext/session/session.c
@@ -106,7 +106,6 @@ static inline void php_rinit_session_globals(void) /* {{{ */
/* TODO: These could be moved to MINIT and removed. These should be initialized by php_rshutdown_session_globals() always when execution is finished. */
PS(id) = NULL;
PS(session_status) = php_session_none;
- PS(in_save_handler) = 0;
PS(mod_data) = NULL;
PS(mod_user_is_open) = 0;
PS(define_sid) = 1;
@@ -2036,7 +2035,7 @@ static PHP_FUNCTION(session_create_id)
}
}
- if (!PS(in_save_handler) && PS(session_status) == php_session_active) {
+ if (PS(session_status) == php_session_active) {
int limit = 3;
while (limit--) {
new_id = PS(mod)->s_create_sid(&PS(mod_data));
diff --git a/ext/session/tests/bug60634.phpt b/ext/session/tests/bug60634.phpt
index c21c6360a6..b2f5076287 100644
--- a/ext/session/tests/bug60634.phpt
+++ b/ext/session/tests/bug60634.phpt
@@ -40,16 +40,16 @@ session_write_close();
echo "um, hi\n";
/*
- * This test raises error in Unknown function because 2nd close write handler is
- * called at request shutdown and session module detects recursive call like
- * multiple save handler calls.
- */
+FIXME: Since session module try to write/close session data in
+RSHUTDOWN, write() is executed twices. This is caused by undefined
+function error and zend_bailout(). Current session module codes
+depends on this behavior. These codes should be modified to remove
+multiple write().
+*/
?>
--EXPECTF--
write: goodbye cruel world
-
-Warning: Unknown: Cannot call save handler function recursive manner in Unknown on line 0
-
-Warning: Unknown: Failed to write session data using user defined save handler. (session.save_path: ) in Unknown on line 0
+write: goodbye cruel world
close: goodbye cruel world
+
diff --git a/ext/session/tests/bug60634_error_3.phpt b/ext/session/tests/bug60634_error_3.phpt
index b38899b8c1..b7840b04f9 100644
--- a/ext/session/tests/bug60634_error_3.phpt
+++ b/ext/session/tests/bug60634_error_3.phpt
@@ -48,5 +48,4 @@ Stack trace:
#0 [internal function]: write(%s, '')
#1 {main}
thrown in %s on line %d
-
-Warning: Unknown: Cannot call save handler function recursive manner in Unknown on line 0
+close: goodbye cruel world
diff --git a/ext/session/tests/bug60634_error_4.phpt b/ext/session/tests/bug60634_error_4.phpt
index 3ac6247974..7970b35c7a 100644
--- a/ext/session/tests/bug60634_error_4.phpt
+++ b/ext/session/tests/bug60634_error_4.phpt
@@ -48,5 +48,5 @@ Stack trace:
#0 [internal function]: write('%s', '')
#1 {main}
thrown in %s on line %d
+close: goodbye cruel world
-Warning: Unknown: Cannot call save handler function recursive manner in Unknown on line 0