summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorZeev Suraski <zeev@php.net>2002-03-02 14:20:17 +0000
committerZeev Suraski <zeev@php.net>2002-03-02 14:20:17 +0000
commit1b2e5a9adf6915f2dca17020b8183ba419740669 (patch)
tree5bb8e43f6304e7d61263d6938091749ed6fcb312
parent2e0a2d165ae856533615fc2c0cd0daf190dca5bf (diff)
downloadphp-git-1b2e5a9adf6915f2dca17020b8183ba419740669.tar.gz
MFH - crash bug fix
-rw-r--r--ext/session/session.c19
1 files changed, 10 insertions, 9 deletions
diff --git a/ext/session/session.c b/ext/session/session.c
index b83ff87d1a..fc718eeb9a 100644
--- a/ext/session/session.c
+++ b/ext/session/session.c
@@ -428,16 +428,17 @@ static void php_session_track_init(TSRMLS_D)
zval **old_vars = NULL;
if (zend_hash_find(&EG(symbol_table), "HTTP_SESSION_VARS", sizeof("HTTP_SESSION_VARS"), (void **)&old_vars) == SUCCESS && Z_TYPE_PP(old_vars) == IS_ARRAY) {
- PS(http_session_vars) = *old_vars;
- zend_hash_clean(Z_ARRVAL_P(PS(http_session_vars)));
+ PS(http_session_vars) = *old_vars;
+ zend_hash_clean(Z_ARRVAL_P(PS(http_session_vars)));
} else {
- if(old_vars) {
- zend_hash_del(&EG(symbol_table), "HTTP_SESSION_VARS", sizeof("HTTP_SESSION_VARS"));
- }
- 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);
- ZEND_SET_GLOBAL_VAR_WITH_LENGTH("_SESSION", sizeof("_SESSION"), PS(http_session_vars), 1, 0);
+ if(old_vars) {
+ zend_hash_del(&EG(symbol_table), "HTTP_SESSION_VARS", sizeof("HTTP_SESSION_VARS"));
+ }
+ MAKE_STD_ZVAL(PS(http_session_vars));
+ array_init(PS(http_session_vars));
+ PS(http_session_vars)->refcount = 2;
+ zend_hash_update(&EG(symbol_table), "HTTP_SESSION_VARS", sizeof("HTTP_SESSION_VARS"), &PS(http_session_vars), sizeof(zval *), NULL);
+ zend_hash_update(&EG(symbol_table), "_SESSION", sizeof("_SESSION"), &PS(http_session_vars), sizeof(zval *), NULL);
}
}