summaryrefslogtreecommitdiff
path: root/ext/session/php_session.h
diff options
context:
space:
mode:
authorSascha Schumann <sas@php.net>2002-10-01 11:59:45 +0000
committerSascha Schumann <sas@php.net>2002-10-01 11:59:45 +0000
commit856cd5e17a368b5747130afe3e77fc4b2a5e6b4d (patch)
treeb48dcbbb3975df318079e79260fc4668c14f1527 /ext/session/php_session.h
parent7cacf9713dba2e7c56f664c95499d4873d22fffc (diff)
downloadphp-git-856cd5e17a368b5747130afe3e77fc4b2a5e6b4d.tar.gz
The session extension ensures now that get_session_var can rely
on the state of $_SESSION/$HTTP_SESSION_VARS. It does not look up symbols in the global symbol table anymore. This was achieved by actually planting references between every $_SESSION["x"] and $x, not only when restoring a session, but also when registering a session variable (in a register_globals=1 context). Upon registering a new variable, this memory leak continues to show up, regardless of register_globals. ext/session/session.c(272) : Freeing 0x0818F01C (12 bytes), script=test Obviously, the newly allocated empty zval is not properly freed. If anyone has any idea on how to fix that, please step forward.
Diffstat (limited to 'ext/session/php_session.h')
-rw-r--r--ext/session/php_session.h16
1 files changed, 7 insertions, 9 deletions
diff --git a/ext/session/php_session.h b/ext/session/php_session.h
index 022f8df342..8cb02bfa64 100644
--- a/ext/session/php_session.h
+++ b/ext/session/php_session.h
@@ -174,6 +174,7 @@ typedef struct ps_serializer_struct {
PHPAPI void session_adapt_url(const char *, size_t, char **, size_t * TSRMLS_DC);
+void php_add_session_var(char *name, size_t namelen TSRMLS_DC);
void php_set_session_var(char *name, size_t namelen, zval *state_val, php_unserialize_data_t *var_hash TSRMLS_DC);
int php_get_session_var(char *name, size_t namelen, zval ***state_var TSRMLS_DC);
@@ -186,22 +187,19 @@ PHPAPI int php_session_register_serializer(const char *name,
PHPAPI void php_session_set_id(char *id TSRMLS_DC);
PHPAPI void php_session_start(TSRMLS_D);
-#define PS_ADD_VARL(name,namelen) \
+#define PS_ADD_VARL(name,namelen) do { \
zend_hash_add_empty_element(&PS(vars), name, namelen + 1); \
- if (PS(http_session_vars)) { \
- zval *empty_var; \
- \
- ALLOC_INIT_ZVAL(empty_var); \
- zend_hash_add(Z_ARRVAL_P(PS(http_session_vars)), name, namelen+1, &empty_var, sizeof(zval *), NULL); \
- }
+ php_add_session_var(name, namelen TSRMLS_CC); \
+} while (0)
#define PS_ADD_VAR(name) PS_ADD_VARL(name, strlen(name))
-#define PS_DEL_VARL(name,namelen) \
+#define PS_DEL_VARL(name,namelen) do { \
zend_hash_del(&PS(vars), name, namelen+1); \
if (PS(http_session_vars)) { \
zend_hash_del(Z_ARRVAL_P(PS(http_session_vars)), name, namelen+1); \
- }
+ } \
+} while (0)
#define PS_ENCODE_VARS \