]> granicus.if.org Git - php/commitdiff
Try to fix #5271 - crash when $HTTP_SESSION_VARS is already defined
authorStanislav Malyshev <stas@php.net>
Thu, 29 Jun 2000 13:09:27 +0000 (13:09 +0000)
committerStanislav Malyshev <stas@php.net>
Thu, 29 Jun 2000 13:09:27 +0000 (13:09 +0000)
via "global"
# I'm not sure it's fastest fix possible, but at least it should remove the
# crash

ext/session/session.c

index 55cf9649b106e1778d4626494989a84dd6205516..4d9b990bc2e128d05cd77f285ab6332ece8e87e0 100644 (file)
@@ -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)