diff options
author | Stanislav Malyshev <stas@php.net> | 2000-06-29 13:09:27 +0000 |
---|---|---|
committer | Stanislav Malyshev <stas@php.net> | 2000-06-29 13:09:27 +0000 |
commit | 1d46433bfabcd26c46adbfe4f1177c18262fcae9 (patch) | |
tree | 9f7dd021f595a459f87ebdcbd591452040faec67 | |
parent | 64293ba38fde01cdc62aff23d1146f6aff9afcb0 (diff) | |
download | php-git-1d46433bfabcd26c46adbfe4f1177c18262fcae9.tar.gz |
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
-rw-r--r-- | ext/session/session.c | 19 |
1 files changed, 12 insertions, 7 deletions
diff --git a/ext/session/session.c b/ext/session/session.c index 55cf9649b1..4d9b990bc2 100644 --- a/ext/session/session.c +++ b/ext/session/session.c @@ -375,16 +375,21 @@ PS_SERIALIZER_DECODE_FUNC(wddx) static void php_session_track_init(void) { + zval **old_vars = NULL; PSLS_FETCH(); ELS_FETCH(); - if (zend_hash_find(&EG(symbol_table), "HTTP_SESSION_VARS", sizeof("HTTP_SESSION_VARS"), - (void **)&PS(http_session_vars)) == FAILURE || PS(http_session_vars)->type != IS_ARRAY) { - 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); - } else - zend_hash_clean(PS(http_session_vars)->value.ht); + if (zend_hash_find(&EG(symbol_table), "HTTP_SESSION_VARS", sizeof("HTTP_SESSION_VARS"), (void **)&old_vars) == SUCCESS && (*old_vars)->type == IS_ARRAY) { + PS(http_session_vars) = *old_vars; + zend_hash_clean(PS(http_session_vars)->value.ht); + } 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); + } } static char *_php_session_encode(int *newlen PSLS_DC) |