sas Wed Oct 2 17:51:32 2002 EDT
Modified files:
/php4/ext/session session.c
Log:
Fix harmless memory leaks and simplify track_vars_init.
Index: php4/ext/session/session.c
diff -u php4/ext/session/session.c:1.323 php4/ext/session/session.c:1.324
--- php4/ext/session/session.c:1.323 Tue Oct 1 07:59:45 2002
+++ php4/ext/session/session.c Wed Oct 2 17:51:32 2002
@@ -17,7 +17,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: session.c,v 1.323 2002/10/01 11:59:45 sas Exp $ */
+/* $Id: session.c,v 1.324 2002/10/02 21:51:32 sas Exp $ */
#ifdef HAVE_CONFIG_H
#include "config.h"
@@ -258,7 +258,9 @@
if (sym_global == NULL && sym_track == NULL) {
zval *empty_var;
- ALLOC_INIT_ZVAL(empty_var);
+ ALLOC_INIT_ZVAL(empty_var); /* this sets refcount to 1 */
+ ZVAL_DELREF(empty_var); /* our module does not maintain a ref
+*/
+ /* The next call will increase refcount by NR_OF_SYM_TABLES==2
+*/
zend_set_hash_symbol(empty_var, name, namelen, 1, 2,
Z_ARRVAL_P(PS(http_session_vars)), &EG(symbol_table));
} else if (sym_global == NULL) {
zend_set_hash_symbol(*sym_track, name, namelen, 1, 1,
&EG(symbol_table));
@@ -270,7 +272,7 @@
zval *empty_var;
ALLOC_INIT_ZVAL(empty_var);
- zend_set_hash_symbol(empty_var, name, namelen, 0, 1,
Z_ARRVAL_P(PS(http_session_vars)));
+ ZEND_SET_SYMBOL_WITH_LENGTH(Z_ARRVAL_P(PS(http_session_vars)),
+name, namelen+1, empty_var, 1, 0);
}
}
}
@@ -465,23 +467,16 @@
static void php_session_track_init(TSRMLS_D)
{
- zval **old_vars = NULL;
+ /* Unconditionally destroy existing arrays -- possible dirty data */
+ zend_hash_del(&EG(symbol_table), "HTTP_SESSION_VARS",
+ sizeof("HTTP_SESSION_VARS"));
+ zend_hash_del(&EG(symbol_table), "_SESSION", sizeof("_SESSION"));
- 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)));
- } else {
- if(old_vars) {
- zend_hash_del(&EG(symbol_table), "HTTP_SESSION_VARS",
sizeof("HTTP_SESSION_VARS"));
- zend_hash_del(&EG(symbol_table), "_SESSION",
sizeof("_SESSION"));
- }
- MAKE_STD_ZVAL(PS(http_session_vars));
- array_init(PS(http_session_vars));
- PS(http_session_vars)->refcount = 2;
- PS(http_session_vars)->is_ref = 1;
- 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);
- }
+ MAKE_STD_ZVAL(PS(http_session_vars));
+ array_init(PS(http_session_vars));
+
+ ZEND_SET_GLOBAL_VAR("HTTP_SESSION_VARS", PS(http_session_vars));
+ ZEND_SET_GLOBAL_VAR("_SESSION", PS(http_session_vars));
}
static char *php_session_encode(int *newlen TSRMLS_DC)
--
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php