cvs: php4 /ext/session/ session.c
| From: | Sascha Schumann | Date: | Fri, 09 Jun 2000 00:23:20 +0000 |
| Subject: | cvs: php4 /ext/session/ session.c | ||
| Groups: | php.cvs | ||
| Request: | Send a blank email to php-cvs+get-91@lists.php.net to get a copy of this message | ||
sas Thu Jun 8 17:23:20 2000 EDT
Modified files:
/php4/ext/session session.c
Log:
Automatically recover from a failed attempt to decode a session object.
PR: #4886
Index: php4/ext/session/session.c
diff -u php4/ext/session/session.c:1.144 php4/ext/session/session.c:1.145
--- php4/ext/session/session.c:1.144 Thu Jun 8 16:42:04 2000
+++ php4/ext/session/session.c Thu Jun 8 17:23:20 2000
@@ -96,7 +96,7 @@
STD_PHP_INI_BOOLEAN("session.auto_start", "0", PHP_INI_ALL,
OnUpdateBool, auto_start, php_ps_globals, ps_globals)
STD_PHP_INI_ENTRY("session.gc_probability", "1", PHP_INI_ALL,
OnUpdateInt, gc_probability, php_ps_globals, ps_globals)
STD_PHP_INI_ENTRY("session.gc_maxlifetime", "1440", PHP_INI_ALL,
OnUpdateInt, gc_maxlifetime, php_ps_globals, ps_globals)
- PHP_INI_ENTRY("session.serialize_handler", "php", PHP_INI_ALL,
OnUpdateSerializer)
+ PHP_INI_ENTRY("session.serialize_handler", "wddx", PHP_INI_ALL,
OnUpdateSerializer)
STD_PHP_INI_ENTRY("session.cookie_lifetime", "0", PHP_INI_ALL,
OnUpdateInt, cookie_lifetime, php_ps_globals, ps_globals)
STD_PHP_INI_ENTRY("session.cookie_path", "/", PHP_INI_ALL,
OnUpdateString, cookie_path, php_ps_globals, ps_globals)
STD_PHP_INI_ENTRY("session.cookie_domain", "", PHP_INI_ALL,
OnUpdateString, cookie_domain, php_ps_globals, ps_globals)
@@ -132,6 +132,7 @@
static void php_rinit_session_globals(PSLS_D);
static void php_rshutdown_session_globals(PSLS_D);
+static void _php_session_destroy(PSLS_D);
zend_module_entry session_module_entry = {
"session",
@@ -335,14 +336,22 @@
ulong idx;
int hash_type;
int dofree = 1;
+ int ret = SUCCESS;
if (vallen == 0)
- return FAILURE;
+ return SUCCESS;
MAKE_STD_ZVAL(retval);
+ retval->type = IS_NULL;
+
php_wddx_deserialize_ex((char *)val, vallen, retval);
+ if (retval->type == IS_NULL) {
+ ret = FAILURE;
+ goto cleanup;
+ }
+
for (zend_hash_internal_pointer_reset(retval->value.ht);
zend_hash_get_current_data(retval->value.ht, (void **) &ent) == SUCCESS;
zend_hash_move_forward(retval->value.ht)) {
@@ -362,10 +371,11 @@
}
}
+cleanup:
zval_dtor(retval);
efree(retval);
- return SUCCESS;
+ return ret;
}
#endif
@@ -400,7 +410,10 @@
if (PG(track_vars))
php_session_track_init();
- PS(serializer)->decode(val, vallen PSLS_CC);
+ if (PS(serializer)->decode(val, vallen PSLS_CC) == FAILURE) {
+ _php_session_destroy(PSLS_C);
+ php_error(E_WARNING, "Failed to decode session object. Session has been destroyed
now.");
+ }
}
static char *_php_create_id(int *newlen PSLS_DC)