Try to fix #5271 - crash when $HTTP_SESSION_VARS is already defined

via "global"
# I'm not sure it's fastest fix possible, but at least it should remove the
# crash
This commit is contained in:
Stanislav Malyshev 2000-06-29 13:09:27 +00:00
parent 64293ba38f
commit 1d46433bfa

View File

@ -375,16 +375,21 @@ PS_SERIALIZER_DECODE_FUNC(wddx)
static void php_session_track_init(void) static void php_session_track_init(void)
{ {
zval **old_vars = NULL;
PSLS_FETCH(); PSLS_FETCH();
ELS_FETCH(); ELS_FETCH();
if (zend_hash_find(&EG(symbol_table), "HTTP_SESSION_VARS", sizeof("HTTP_SESSION_VARS"), if (zend_hash_find(&EG(symbol_table), "HTTP_SESSION_VARS", sizeof("HTTP_SESSION_VARS"), (void **)&old_vars) == SUCCESS && (*old_vars)->type == IS_ARRAY) {
(void **)&PS(http_session_vars)) == FAILURE || PS(http_session_vars)->type != IS_ARRAY) { PS(http_session_vars) = *old_vars;
MAKE_STD_ZVAL(PS(http_session_vars)); zend_hash_clean(PS(http_session_vars)->value.ht);
array_init(PS(http_session_vars)); } else {
ZEND_SET_GLOBAL_VAR_WITH_LENGTH("HTTP_SESSION_VARS", sizeof("HTTP_SESSION_VARS"), PS(http_session_vars), 1, 0); if(old_vars) {
} else zend_hash_del(&EG(symbol_table), "HTTP_SESSION_VARS", sizeof("HTTP_SESSION_VARS"));
zend_hash_clean(PS(http_session_vars)->value.ht); }
MAKE_STD_ZVAL(PS(http_session_vars));
array_init(PS(http_session_vars));
ZEND_SET_GLOBAL_VAR_WITH_LENGTH("HTTP_SESSION_VARS", sizeof("HTTP_SESSION_VARS"), PS(http_session_vars), 1, 0);
}
} }
static char *_php_session_encode(int *newlen PSLS_DC) static char *_php_session_encode(int *newlen PSLS_DC)