summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorStanislav Malyshev <stas@php.net>2009-12-04 01:21:32 +0000
committerStanislav Malyshev <stas@php.net>2009-12-04 01:21:32 +0000
commit86529ad73c3fee55437ce04852ad30c9a7d31eb3 (patch)
treefef2cf3e3cbc4a4653267e09e9715bf8f1a5c6ba
parentb109e5bd82a9edfc8680429bc3c55f0d4de36397 (diff)
downloadphp-git-86529ad73c3fee55437ce04852ad30c9a7d31eb3.tar.gz
protect http_session_vars from interrupt corruption
improve save_path check
-rw-r--r--ext/session/session.c10
1 files changed, 8 insertions, 2 deletions
diff --git a/ext/session/session.c b/ext/session/session.c
index 9ca5a6450d..db397dd6ac 100644
--- a/ext/session/session.c
+++ b/ext/session/session.c
@@ -1817,7 +1817,10 @@ static PHP_FUNCTION(session_unset)
}
IF_SESSION_VARS() {
- HashTable *ht = Z_ARRVAL_P(PS(http_session_vars));
+ HashTable *ht;
+
+ SEPARATE_ZVAL_IF_NOT_REF(&PS(http_session_vars));
+ ht = Z_ARRVAL_P(PS(http_session_vars));
if (PG(register_globals)) {
uint str_len;
@@ -1899,7 +1902,10 @@ static PHP_FUNCTION(session_unregister)
}
convert_to_string_ex(p_name);
- PS_DEL_VARL(Z_STRVAL_PP(p_name), Z_STRLEN_PP(p_name));
+ IF_SESSION_VARS() {
+ SEPARATE_ZVAL_IF_NOT_REF(&PS(http_session_vars));
+ PS_DEL_VARL(Z_STRVAL_PP(p_name), Z_STRLEN_PP(p_name));
+ }
RETURN_TRUE;
}