From 7f196e321fa464075248eced7d0d2c046b686b24 Mon Sep 17 00:00:00 2001 From: Yasuo Ohgaki Date: Thu, 17 Nov 2016 11:09:07 +0900 Subject: [PATCH] Fix bug #71038 - session_start() returns true even when it failed PR #2167 --- UPGRADING | 30 ++ UPGRADING.INTERNALS | 5 + ext/session/php_session.h | 6 +- ext/session/session.c | 372 ++++++++++++++---- ext/session/tests/004.phpt | 1 + ext/session/tests/005.phpt | 2 +- ext/session/tests/006.phpt | 3 +- ext/session/tests/009.phpt | 1 + ext/session/tests/024.phpt | 1 + ext/session/tests/025.phpt | 2 +- ext/session/tests/026.phpt | 1 + ext/session/tests/027.phpt | 1 + ext/session/tests/bug60860.phpt | 3 +- ext/session/tests/bug66481.phpt | 1 + ext/session/tests/bug73100.phpt | 6 +- ext/session/tests/rfc1867_sid_invalid.phpt | 51 ++- ext/session/tests/session_basic1.phpt | 4 +- ext/session/tests/session_basic2.phpt | 4 +- ext/session/tests/session_basic3.phpt | 2 +- ext/session/tests/session_basic5.phpt | 2 +- .../tests/session_cache_expire_basic.phpt | 2 + .../session_cache_expire_variation1.phpt | 2 + .../session_cache_expire_variation2.phpt | 2 + .../session_cache_expire_variation3.phpt | 2 + .../tests/session_cache_limiter_basic.phpt | 11 +- .../session_cache_limiter_variation1.phpt | 17 +- .../session_cache_limiter_variation2.phpt | 17 +- .../session_cache_limiter_variation3.phpt | 11 +- ext/session/tests/session_commit_basic.phpt | 2 +- ext/session/tests/session_commit_error.phpt | 49 ++- .../tests/session_commit_variation1.phpt | 11 +- .../tests/session_commit_variation2.phpt | 6 +- .../tests/session_commit_variation3.phpt | 2 +- .../tests/session_commit_variation4.phpt | 6 +- .../tests/session_commit_variation5.phpt | 10 +- .../tests/session_encode_variation1.phpt | 2 +- .../session_get_cookie_params_basic.phpt | 4 +- ext/session/tests/session_ini_set.phpt | 182 +++++++++ .../tests/session_module_name_variation3.phpt | 12 +- .../tests/session_module_name_variation4.phpt | 2 +- .../tests/session_save_path_error.phpt | 2 - .../tests/session_save_path_variation1.phpt | 25 +- .../tests/session_save_path_variation4.phpt | 14 +- .../session_set_cookie_params_basic.phpt | 9 +- .../session_set_cookie_params_error.phpt | 297 +++++++------- .../session_set_cookie_params_variation1.phpt | 15 +- .../session_set_cookie_params_variation2.phpt | 13 +- .../session_set_cookie_params_variation3.phpt | 13 +- .../session_set_cookie_params_variation4.phpt | 13 +- .../session_set_cookie_params_variation5.phpt | 13 +- .../session_set_save_handler_class_005.phpt | 2 +- .../session_set_save_handler_class_012.phpt | 2 +- .../session_set_save_handler_error3.phpt | 10 +- .../session_set_save_handler_variation2.phpt | 2 + .../session_set_save_handler_variation3.phpt | 7 +- .../session_set_save_handler_variation4.phpt | 2 +- .../session_set_save_handler_variation5.phpt | 4 +- .../tests/session_start_variation1.phpt | 9 +- .../tests/session_start_variation3.phpt | 13 +- .../tests/session_start_variation5.phpt | 2 +- .../tests/session_start_variation6.phpt | 2 +- .../tests/session_start_variation9.phpt | 3 +- ext/session/tests/session_unset_basic.phpt | 2 +- ext/session/tests/session_unset_error.phpt | 97 +++-- .../tests/session_unset_variation1.phpt | 2 +- .../tests/session_write_close_basic.phpt | 2 +- .../tests/session_write_close_error.phpt | 49 ++- .../tests/session_write_close_variation1.phpt | 11 +- .../tests/session_write_close_variation2.phpt | 7 +- .../tests/session_write_close_variation3.phpt | 2 +- .../tests/session_write_close_variation4.phpt | 6 +- 71 files changed, 1097 insertions(+), 403 deletions(-) create mode 100644 ext/session/tests/session_ini_set.phpt diff --git a/UPGRADING b/UPGRADING index fe32aeecd4b..98f67446ea0 100644 --- a/UPGRADING +++ b/UPGRADING @@ -36,6 +36,36 @@ PHP 7.2 UPGRADE NOTES keys. This fixes the behaviour of previous versions, where numeric string property names would become inaccessible string keys. +- Session: + . Session is made to manage session status corretly and prevents invalid operations. + Only inappropriate codes are affected by this change. If you have problems with this, + it means you have problem in your code. + . Functions are made to set or return correct session status. + session_start(), session_status(), session_regenerate_id() + . Functions are made to return bool from null. These functions have void parameter + and void parameter is checked. + session_unset(), session_write_close()/session_commit(), session_abort(), + session_reset() + . Functions prohibit invalid operations with regard to session status and + HTTP header status, returns correct bool return value. + session_start(), session_set_cookie_params(), session_name(), session_module_name(), + session_set_save_handler(), session_regenerate_id(), session_cache_limiter(), + session_cache_expire(), session_unset(), session_destroy(), + session_write_close()/session_commit(), session_reset() + . INI value change by ini_set() returns update status correctly. Invalid INI modifications + are checked and made to fail. + session.name, session.save_path, session.cookie_lifetime, session.cookie_path, + session.cookie_domain, session.cookie_httponly, session.cookie_secure, + session.use_cookies, session.use_only_cookies, session.use_strict_mode, + session.referer_check, session.cache_limiter, session.cache_expire, + session.lazy_write, session.save_handler, session.serialize_handler, + session.gc_probability, session.gc_divior, session.gc_maxlifetime, + . Some E_ERRORs are changed to E_WARNING since session status is managed correctly. + session_start() + . Session no longer initialize $_SESSION for invalid and useless session. + session_start() + + ======================================== 2. New Features ======================================== diff --git a/UPGRADING.INTERNALS b/UPGRADING.INTERNALS index 71ade7becc0..e13dc22010e 100644 --- a/UPGRADING.INTERNALS +++ b/UPGRADING.INTERNALS @@ -31,3 +31,8 @@ PHP 7.1 INTERNALS UPGRADE NOTES 3. Module changes ======================== +- Session: + . php_session_start()/session_reset_id() return value is changed from void to int. + It returns SUCCESS/FAILURE. + . Session module manages session status correctly. + diff --git a/ext/session/php_session.h b/ext/session/php_session.h index 5e1deb2792b..ceb4a1f4fd9 100644 --- a/ext/session/php_session.h +++ b/ext/session/php_session.h @@ -27,7 +27,7 @@ # include "ext/hash/php_hash.h" #endif -#define PHP_SESSION_API 20150121 +#define PHP_SESSION_API 20161017 #include "php_version.h" #define PHP_SESSION_VERSION PHP_VERSION @@ -265,13 +265,13 @@ PHPAPI int php_session_register_serializer(const char *name, int (*decode)(PS_SERIALIZER_DECODE_ARGS)); PHPAPI void php_session_set_id(char *id); -PHPAPI void php_session_start(void); +PHPAPI int php_session_start(void); PHPAPI ps_module *_php_find_ps_module(char *name); PHPAPI const ps_serializer *_php_find_ps_serializer(char *name); PHPAPI int php_session_valid_key(const char *key); -PHPAPI void php_session_reset_id(void); +PHPAPI int php_session_reset_id(void); #define PS_ADD_VARL(name) do { \ php_add_session_var(name); \ diff --git a/ext/session/session.c b/ext/session/session.c index ecce0c322cf..1e7b6c740ba 100644 --- a/ext/session/session.c +++ b/ext/session/session.c @@ -94,10 +94,16 @@ zend_class_entry *php_session_update_timestamp_iface_entry; return FAILURE; \ } +#define SESSION_CHECK_OUTPUT_STATE \ + if (SG(headers_sent) && stage != ZEND_INI_STAGE_DEACTIVATE) { \ + php_error_docref(NULL, E_WARNING, "Headers already sent. You cannot change the session module's ini settings at this time"); \ + return FAILURE; \ + } + #define APPLY_TRANS_SID (PS(use_trans_sid) && !PS(use_only_cookies)) -static void php_session_send_cookie(void); -static void php_session_abort(void); +static int php_session_send_cookie(void); +static int php_session_abort(void); /* Dispatched by RINIT and by php_session_destroy */ static inline void php_rinit_session_globals(void) /* {{{ */ @@ -370,7 +376,7 @@ static zend_long php_session_gc(zend_bool immediate) /* {{{ */ return num; } /* }}} */ -static void php_session_initialize(void) /* {{{ */ +static int php_session_initialize(void) /* {{{ */ { zend_string *val = NULL; @@ -378,8 +384,8 @@ static void php_session_initialize(void) /* {{{ */ if (!PS(mod)) { PS(session_status) = php_session_disabled; - php_error_docref(NULL, E_ERROR, "No storage module chosen - failed to initialize session"); - return; + php_error_docref(NULL, E_WARNING, "No storage module chosen - failed to initialize session"); + return FAILURE; } /* Open session handler first */ @@ -387,8 +393,8 @@ static void php_session_initialize(void) /* {{{ */ /* || PS(mod_data) == NULL */ /* FIXME: open must set valid PS(mod_data) with success */ ) { php_session_abort(); - php_error_docref(NULL, E_ERROR, "Failed to initialize storage module: %s (path: %s)", PS(mod)->s_name, PS(save_path)); - return; + php_error_docref(NULL, E_WARNING, "Failed to initialize storage module: %s (path: %s)", PS(mod)->s_name, PS(save_path)); + return FAILURE; } /* If there is no ID, use session module to create one */ @@ -400,7 +406,7 @@ static void php_session_initialize(void) /* {{{ */ if (!PS(id)) { php_session_abort(); zend_throw_error(NULL, "Failed to create session ID: %s (path: %s)", PS(mod)->s_name, PS(save_path)); - return; + return FAILURE; } if (PS(use_cookies)) { PS(send_cookie) = 1; @@ -419,7 +425,10 @@ static void php_session_initialize(void) /* {{{ */ } } - php_session_reset_id(); + if (php_session_reset_id() == FAILURE) { + php_session_abort(); + return FAILURE; + } /* Read data */ php_session_track_init(); @@ -428,7 +437,7 @@ static void php_session_initialize(void) /* {{{ */ /* Some broken save handler implementation returns FAILURE for non-existent session ID */ /* It's better to raise error for this, but disabled error for better compatibility */ php_error_docref(NULL, E_WARNING, "Failed to read session data: %s (path: %s)", PS(mod)->s_name, PS(save_path)); - return; + return FAILURE; } /* GC must be done after read */ @@ -445,6 +454,7 @@ static void php_session_initialize(void) /* {{{ */ php_session_decode(val); zend_string_release(val); } + return SUCCESS; } /* }}} */ @@ -519,7 +529,9 @@ static void php_session_normalize_vars() /* {{{ */ static PHP_INI_MH(OnUpdateSaveHandler) /* {{{ */ { ps_module *tmp; + SESSION_CHECK_ACTIVE_STATE; + SESSION_CHECK_OUTPUT_STATE; tmp = _php_find_ps_module(ZSTR_VAL(new_value)); @@ -549,7 +561,9 @@ static PHP_INI_MH(OnUpdateSaveHandler) /* {{{ */ static PHP_INI_MH(OnUpdateSerializer) /* {{{ */ { const ps_serializer *tmp; + SESSION_CHECK_ACTIVE_STATE; + SESSION_CHECK_OUTPUT_STATE; tmp = _php_find_ps_serializer(ZSTR_VAL(new_value)); @@ -577,6 +591,7 @@ static PHP_INI_MH(OnUpdateSerializer) /* {{{ */ static PHP_INI_MH(OnUpdateTransSid) /* {{{ */ { SESSION_CHECK_ACTIVE_STATE; + SESSION_CHECK_OUTPUT_STATE; if (!strncasecmp(ZSTR_VAL(new_value), "on", sizeof("on"))) { PS(use_trans_sid) = (zend_bool) 1; @@ -588,8 +603,12 @@ static PHP_INI_MH(OnUpdateTransSid) /* {{{ */ } /* }}} */ + static PHP_INI_MH(OnUpdateSaveDir) /* {{{ */ { + SESSION_CHECK_ACTIVE_STATE; + SESSION_CHECK_OUTPUT_STATE; + /* Only do the safemode/open_basedir check at runtime */ if (stage == PHP_INI_STAGE_RUNTIME || stage == PHP_INI_STAGE_HTACCESS) { char *p; @@ -614,13 +633,16 @@ static PHP_INI_MH(OnUpdateSaveDir) /* {{{ */ } } - OnUpdateString(entry, new_value, mh_arg1, mh_arg2, mh_arg3, stage); - return SUCCESS; + return OnUpdateString(entry, new_value, mh_arg1, mh_arg2, mh_arg3, stage); } /* }}} */ + static PHP_INI_MH(OnUpdateName) /* {{{ */ { + SESSION_CHECK_ACTIVE_STATE; + SESSION_CHECK_OUTPUT_STATE; + /* Numeric session.name won't work at all */ if ((!ZSTR_LEN(new_value) || is_numeric_string(ZSTR_VAL(new_value), ZSTR_LEN(new_value), NULL, NULL, 0))) { int err_type; @@ -638,16 +660,58 @@ static PHP_INI_MH(OnUpdateName) /* {{{ */ return FAILURE; } - OnUpdateStringUnempty(entry, new_value, mh_arg1, mh_arg2, mh_arg3, stage); - return SUCCESS; + return OnUpdateStringUnempty(entry, new_value, mh_arg1, mh_arg2, mh_arg3, stage); } /* }}} */ + +static PHP_INI_MH(OnUpdateCookieLifetime) /* {{{ */ +{ + SESSION_CHECK_ACTIVE_STATE; + SESSION_CHECK_OUTPUT_STATE; + if (atol(ZSTR_VAL(new_value)) < 0) { + php_error_docref(NULL, E_WARNING, "CookieLifetime cannot be negative"); + return FAILURE; + } + return OnUpdateLongGEZero(entry, new_value, mh_arg1, mh_arg2, mh_arg3, stage); +} +/* }}} */ + + +static PHP_INI_MH(OnUpdateSessionLong) /* {{{ */ +{ + SESSION_CHECK_ACTIVE_STATE; + SESSION_CHECK_OUTPUT_STATE; + return OnUpdateLong(entry, new_value, mh_arg1, mh_arg2, mh_arg3, stage); +} +/* }}} */ + + +static PHP_INI_MH(OnUpdateSessionString) /* {{{ */ +{ + SESSION_CHECK_ACTIVE_STATE; + SESSION_CHECK_OUTPUT_STATE; + return OnUpdateString(entry, new_value, mh_arg1, mh_arg2, mh_arg3, stage); +} +/* }}} */ + + +static PHP_INI_MH(OnUpdateSessionBool) /* {{{ */ +{ + SESSION_CHECK_OUTPUT_STATE; + SESSION_CHECK_ACTIVE_STATE; + return OnUpdateBool(entry, new_value, mh_arg1, mh_arg2, mh_arg3, stage); +} +/* }}} */ + + static PHP_INI_MH(OnUpdateSidLength) /* {{{ */ { zend_long val; char *endptr = NULL; + SESSION_CHECK_OUTPUT_STATE; + SESSION_CHECK_ACTIVE_STATE; val = ZEND_STRTOL(ZSTR_VAL(new_value), &endptr, 10); if (endptr && (*endptr == '\0') && val >= 22 && val <= PS_MAX_SID_LENGTH) { @@ -666,6 +730,8 @@ static PHP_INI_MH(OnUpdateSidBits) /* {{{ */ zend_long val; char *endptr = NULL; + SESSION_CHECK_OUTPUT_STATE; + SESSION_CHECK_ACTIVE_STATE; val = ZEND_STRTOL(ZSTR_VAL(new_value), &endptr, 10); if (endptr && (*endptr == '\0') && val >= 4 && val <=6) { @@ -680,6 +746,16 @@ static PHP_INI_MH(OnUpdateSidBits) /* {{{ */ /* }}} */ +static PHP_INI_MH(OnUpdateLazyWrite) /* {{{ */ +{ + SESSION_CHECK_ACTIVE_STATE; + SESSION_CHECK_OUTPUT_STATE; + return OnUpdateBool(entry, new_value, mh_arg1, mh_arg2, mh_arg3, stage); +} +/* }}} */ + + + static PHP_INI_MH(OnUpdateRfc1867Freq) /* {{{ */ { int tmp; @@ -703,29 +779,29 @@ static PHP_INI_MH(OnUpdateRfc1867Freq) /* {{{ */ /* {{{ PHP_INI */ PHP_INI_BEGIN() - STD_PHP_INI_ENTRY("session.save_path", "", PHP_INI_ALL, OnUpdateSaveDir,save_path, php_ps_globals, ps_globals) - STD_PHP_INI_ENTRY("session.name", "PHPSESSID", PHP_INI_ALL, OnUpdateName, session_name, php_ps_globals, ps_globals) + STD_PHP_INI_ENTRY("session.save_path", "", PHP_INI_ALL, OnUpdateSaveDir, save_path, php_ps_globals, ps_globals) + STD_PHP_INI_ENTRY("session.name", "PHPSESSID", PHP_INI_ALL, OnUpdateName, session_name, php_ps_globals, ps_globals) PHP_INI_ENTRY("session.save_handler", "files", PHP_INI_ALL, OnUpdateSaveHandler) - STD_PHP_INI_BOOLEAN("session.auto_start", "0", PHP_INI_PERDIR, OnUpdateBool, auto_start, php_ps_globals, ps_globals) - STD_PHP_INI_ENTRY("session.gc_probability", "1", PHP_INI_ALL, OnUpdateLong, gc_probability, php_ps_globals, ps_globals) - STD_PHP_INI_ENTRY("session.gc_divisor", "100", PHP_INI_ALL, OnUpdateLong, gc_divisor, php_ps_globals, ps_globals) - STD_PHP_INI_ENTRY("session.gc_maxlifetime", "1440", PHP_INI_ALL, OnUpdateLong, gc_maxlifetime, php_ps_globals, ps_globals) + STD_PHP_INI_BOOLEAN("session.auto_start", "0", PHP_INI_PERDIR, OnUpdateBool, auto_start, php_ps_globals, ps_globals) + STD_PHP_INI_ENTRY("session.gc_probability", "1", PHP_INI_ALL, OnUpdateSessionLong, gc_probability, php_ps_globals, ps_globals) + STD_PHP_INI_ENTRY("session.gc_divisor", "100", PHP_INI_ALL, OnUpdateSessionLong, gc_divisor, php_ps_globals, ps_globals) + STD_PHP_INI_ENTRY("session.gc_maxlifetime", "1440", PHP_INI_ALL, OnUpdateSessionLong, gc_maxlifetime, php_ps_globals, ps_globals) PHP_INI_ENTRY("session.serialize_handler", "php", PHP_INI_ALL, OnUpdateSerializer) - STD_PHP_INI_ENTRY("session.cookie_lifetime", "0", PHP_INI_ALL, OnUpdateLong, cookie_lifetime, php_ps_globals, ps_globals) - STD_PHP_INI_ENTRY("session.cookie_path", "/", PHP_INI_ALL, OnUpdateString, cookie_path, php_ps_globals, ps_globals) - STD_PHP_INI_ENTRY("session.cookie_domain", "", PHP_INI_ALL, OnUpdateString, cookie_domain, php_ps_globals, ps_globals) - STD_PHP_INI_BOOLEAN("session.cookie_secure", "", PHP_INI_ALL, OnUpdateBool, cookie_secure, php_ps_globals, ps_globals) - STD_PHP_INI_BOOLEAN("session.cookie_httponly", "", PHP_INI_ALL, OnUpdateBool, cookie_httponly, php_ps_globals, ps_globals) - STD_PHP_INI_BOOLEAN("session.use_cookies", "1", PHP_INI_ALL, OnUpdateBool, use_cookies, php_ps_globals, ps_globals) - STD_PHP_INI_BOOLEAN("session.use_only_cookies", "1", PHP_INI_ALL, OnUpdateBool, use_only_cookies, php_ps_globals, ps_globals) - STD_PHP_INI_BOOLEAN("session.use_strict_mode", "0", PHP_INI_ALL, OnUpdateBool, use_strict_mode, php_ps_globals, ps_globals) - STD_PHP_INI_ENTRY("session.referer_check", "", PHP_INI_ALL, OnUpdateString, extern_referer_chk, php_ps_globals, ps_globals) - STD_PHP_INI_ENTRY("session.cache_limiter", "nocache", PHP_INI_ALL, OnUpdateString, cache_limiter, php_ps_globals, ps_globals) - STD_PHP_INI_ENTRY("session.cache_expire", "180", PHP_INI_ALL, OnUpdateLong, cache_expire, php_ps_globals, ps_globals) + STD_PHP_INI_ENTRY("session.cookie_lifetime", "0", PHP_INI_ALL, OnUpdateCookieLifetime,cookie_lifetime, php_ps_globals, ps_globals) + STD_PHP_INI_ENTRY("session.cookie_path", "/", PHP_INI_ALL, OnUpdateSessionString, cookie_path, php_ps_globals, ps_globals) + STD_PHP_INI_ENTRY("session.cookie_domain", "", PHP_INI_ALL, OnUpdateSessionString, cookie_domain, php_ps_globals, ps_globals) + STD_PHP_INI_ENTRY("session.cookie_secure", "0", PHP_INI_ALL, OnUpdateSessionBool, cookie_secure, php_ps_globals, ps_globals) + STD_PHP_INI_ENTRY("session.cookie_httponly", "0", PHP_INI_ALL, OnUpdateSessionBool, cookie_httponly, php_ps_globals, ps_globals) + STD_PHP_INI_ENTRY("session.use_cookies", "1", PHP_INI_ALL, OnUpdateSessionBool, use_cookies, php_ps_globals, ps_globals) + STD_PHP_INI_ENTRY("session.use_only_cookies", "1", PHP_INI_ALL, OnUpdateSessionBool, use_only_cookies, php_ps_globals, ps_globals) + STD_PHP_INI_ENTRY("session.use_strict_mode", "0", PHP_INI_ALL, OnUpdateSessionBool, use_strict_mode, php_ps_globals, ps_globals) + STD_PHP_INI_ENTRY("session.referer_check", "", PHP_INI_ALL, OnUpdateSessionString, extern_referer_chk, php_ps_globals, ps_globals) + STD_PHP_INI_ENTRY("session.cache_limiter", "nocache", PHP_INI_ALL, OnUpdateSessionString, cache_limiter, php_ps_globals, ps_globals) + STD_PHP_INI_ENTRY("session.cache_expire", "180", PHP_INI_ALL, OnUpdateSessionLong, cache_expire, php_ps_globals, ps_globals) PHP_INI_ENTRY("session.use_trans_sid", "0", PHP_INI_ALL, OnUpdateTransSid) PHP_INI_ENTRY("session.sid_length", "32", PHP_INI_ALL, OnUpdateSidLength) PHP_INI_ENTRY("session.sid_bits_per_character", "4", PHP_INI_ALL, OnUpdateSidBits) - STD_PHP_INI_BOOLEAN("session.lazy_write", "1", PHP_INI_ALL, OnUpdateBool, lazy_write, php_ps_globals, ps_globals) + STD_PHP_INI_BOOLEAN("session.lazy_write", "1", PHP_INI_ALL, OnUpdateLazyWrite, lazy_write, php_ps_globals, ps_globals) /* Upload progress */ STD_PHP_INI_BOOLEAN("session.upload_progress.enabled", @@ -1236,7 +1312,7 @@ static void php_session_remove_cookie(void) { efree(session_cookie); } -static void php_session_send_cookie(void) /* {{{ */ +static int php_session_send_cookie(void) /* {{{ */ { smart_str ncookie = {0}; zend_string *date_fmt = NULL; @@ -1251,7 +1327,7 @@ static void php_session_send_cookie(void) /* {{{ */ } else { php_error_docref(NULL, E_WARNING, "Cannot send session cookie - headers already sent"); } - return; + return FAILURE; } /* URL encode session_name and id because they might be user supplied */ @@ -1309,6 +1385,8 @@ static void php_session_send_cookie(void) /* {{{ */ header, probably sent with setcookie() will be replaced! */ sapi_add_header_ex(estrndup(ZSTR_VAL(ncookie.s), ZSTR_LEN(ncookie.s)), ZSTR_LEN(ncookie.s), 0, 0); smart_str_free(&ncookie); + + return SUCCESS; } /* }}} */ @@ -1354,7 +1432,8 @@ static void ppid2sid(zval *ppid) { } } -PHPAPI void php_session_reset_id(void) /* {{{ */ + +PHPAPI int php_session_reset_id(void) /* {{{ */ { int module_number = PS(module_number); zval *sid, *data, *ppid; @@ -1362,7 +1441,7 @@ PHPAPI void php_session_reset_id(void) /* {{{ */ if (!PS(id)) { php_error_docref(NULL, E_WARNING, "Cannot set session ID - session ID is not initialized"); - return; + return FAILURE; } if (PS(use_cookies) && PS(send_cookie)) { @@ -1419,10 +1498,12 @@ PHPAPI void php_session_reset_id(void) /* {{{ */ zend_string_release(sname); php_url_scanner_add_session_var(PS(session_name), strlen(PS(session_name)), ZSTR_VAL(PS(id)), ZSTR_LEN(PS(id)), 1); } + return SUCCESS; } /* }}} */ -PHPAPI void php_session_start(void) /* {{{ */ + +PHPAPI int php_session_start(void) /* {{{ */ { zval *ppid; zval *data; @@ -1432,7 +1513,7 @@ PHPAPI void php_session_start(void) /* {{{ */ switch (PS(session_status)) { case php_session_active: php_error(E_NOTICE, "A session had already been started - ignoring session_start()"); - return; + return FAILURE; break; case php_session_disabled: @@ -1441,7 +1522,7 @@ PHPAPI void php_session_start(void) /* {{{ */ PS(mod) = _php_find_ps_module(value); if (!PS(mod)) { php_error_docref(NULL, E_WARNING, "Cannot find save handler '%s' - session startup failed", value); - return; + return FAILURE; } } value = zend_ini_string("session.serialize_handler", sizeof("session.serialize_handler") - 1, 0); @@ -1449,14 +1530,14 @@ PHPAPI void php_session_start(void) /* {{{ */ PS(serializer) = _php_find_ps_serializer(value); if (!PS(serializer)) { php_error_docref(NULL, E_WARNING, "Cannot find serialization handler '%s' - session startup failed", value); - return; + return FAILURE; } } PS(session_status) = php_session_none; - /* fallthrough */ + /* Fall through */ - default: case php_session_none: + default: /* Setup internal flags */ PS(define_sid) = !PS(use_only_cookies); /* SID constant is defined when non-cookie ID is used */ PS(send_cookie) = PS(use_cookies) || PS(use_only_cookies); @@ -1532,36 +1613,50 @@ PHPAPI void php_session_start(void) /* {{{ */ PS(id) = NULL; } - php_session_initialize(); - php_session_cache_limiter(); + if (php_session_initialize() == FAILURE + || php_session_cache_limiter() == -2) { + PS(session_status) = php_session_none; + if (PS(id)) { + zend_string_release(PS(id)); + PS(id) = NULL; + } + return FAILURE; + } + return SUCCESS; } /* }}} */ -static void php_session_flush(int write) /* {{{ */ +static int php_session_flush(int write) /* {{{ */ { if (PS(session_status) == php_session_active) { php_session_save_current_state(write); PS(session_status) = php_session_none; + return SUCCESS; } + return FAILURE; } /* }}} */ -static void php_session_abort(void) /* {{{ */ +static int php_session_abort(void) /* {{{ */ { if (PS(session_status) == php_session_active) { if (PS(mod_data) || PS(mod_user_implemented)) { PS(mod)->s_close(&PS(mod_data)); } PS(session_status) = php_session_none; + return SUCCESS; } + return FAILURE; } /* }}} */ -static void php_session_reset(void) /* {{{ */ +static int php_session_reset(void) /* {{{ */ { - if (PS(session_status) == php_session_active) { - php_session_initialize(); + if (PS(session_status) == php_session_active + && php_session_initialize() == SUCCESS) { + return SUCCESS; } + return FAILURE; } /* }}} */ @@ -1581,7 +1676,7 @@ PHPAPI void session_adapt_url(const char *url, size_t urllen, char **new, size_t * Userspace exported functions * ******************************** */ -/* {{{ proto void session_set_cookie_params(int lifetime [, string path [, string domain [, bool secure[, bool httponly]]]]) +/* {{{ proto bool session_set_cookie_params(int lifetime [, string path [, string domain [, bool secure[, bool httponly]]]]) Set session cookie parameters */ static PHP_FUNCTION(session_set_cookie_params) { @@ -1596,33 +1691,61 @@ static PHP_FUNCTION(session_set_cookie_params) return; } + + if (PS(session_status) == php_session_active) { + php_error_docref(NULL, E_WARNING, "Cannot change session cookie parameters when session is active"); + RETURN_FALSE; + } + + if (SG(headers_sent)) { + php_error_docref(NULL, E_WARNING, "Cannot change session cookie parameters when headers already sent"); + RETURN_FALSE; + } + convert_to_string_ex(lifetime); ini_name = zend_string_init("session.cookie_lifetime", sizeof("session.cookie_lifetime") - 1, 0); - zend_alter_ini_entry(ini_name, Z_STR_P(lifetime), PHP_INI_USER, PHP_INI_STAGE_RUNTIME); + if (zend_alter_ini_entry(ini_name, Z_STR_P(lifetime), PHP_INI_USER, PHP_INI_STAGE_RUNTIME) == FAILURE) { + zend_string_release(ini_name); + RETURN_FALSE; + } zend_string_release(ini_name); if (path) { ini_name = zend_string_init("session.cookie_path", sizeof("session.cookie_path") - 1, 0); - zend_alter_ini_entry(ini_name, path, PHP_INI_USER, PHP_INI_STAGE_RUNTIME); + if (zend_alter_ini_entry(ini_name, path, PHP_INI_USER, PHP_INI_STAGE_RUNTIME) == FAILURE) { + zend_string_release(ini_name); + RETURN_FALSE; + } zend_string_release(ini_name); } if (domain) { ini_name = zend_string_init("session.cookie_domain", sizeof("session.cookie_domain") - 1, 0); - zend_alter_ini_entry(ini_name, domain, PHP_INI_USER, PHP_INI_STAGE_RUNTIME); + if (zend_alter_ini_entry(ini_name, domain, PHP_INI_USER, PHP_INI_STAGE_RUNTIME) == FAILURE) { + zend_string_release(ini_name); + RETURN_FALSE; + } zend_string_release(ini_name); } if (argc > 3) { ini_name = zend_string_init("session.cookie_secure", sizeof("session.cookie_secure") - 1, 0); - zend_alter_ini_entry_chars(ini_name, secure ? "1" : "0", 1, PHP_INI_USER, PHP_INI_STAGE_RUNTIME); + if (zend_alter_ini_entry_chars(ini_name, secure ? "1" : "0", 1, PHP_INI_USER, PHP_INI_STAGE_RUNTIME) == FAILURE) { + zend_string_release(ini_name); + RETURN_FALSE; + } zend_string_release(ini_name); } if (argc > 4) { ini_name = zend_string_init("session.cookie_httponly", sizeof("session.cookie_httponly") - 1, 0); - zend_alter_ini_entry_chars(ini_name, httponly ? "1" : "0", 1, PHP_INI_USER, PHP_INI_STAGE_RUNTIME); + if (zend_alter_ini_entry_chars(ini_name, httponly ? "1" : "0", 1, PHP_INI_USER, PHP_INI_STAGE_RUNTIME) == FAILURE) { + zend_string_release(ini_name); + RETURN_FALSE; + } zend_string_release(ini_name); } + + RETURN_TRUE; } /* }}} */ @@ -1655,6 +1778,16 @@ static PHP_FUNCTION(session_name) return; } + if (name && PS(session_status) == php_session_active) { + php_error_docref(NULL, E_WARNING, "Cannot change session name when session is active"); + RETURN_FALSE; + } + + if (SG(headers_sent)) { + php_error_docref(NULL, E_WARNING, "Cannot change session name when headers already sent"); + RETURN_FALSE; + } + RETVAL_STRING(PS(session_name)); if (name) { @@ -1676,6 +1809,16 @@ static PHP_FUNCTION(session_module_name) return; } + if (name && PS(session_status) == php_session_active) { + php_error_docref(NULL, E_WARNING, "Cannot change save handler module when session is active"); + RETURN_FALSE; + } + + if (SG(headers_sent)) { + php_error_docref(NULL, E_WARNING, "Cannot change save handler module when headers already sent"); + RETURN_FALSE; + } + /* Set return_value to current module name */ if (PS(mod) && PS(mod)->s_name) { RETVAL_STRING(PS(mod)->s_name); @@ -1702,7 +1845,7 @@ static PHP_FUNCTION(session_module_name) } /* }}} */ -/* {{{ proto void session_set_save_handler(string open, string close, string read, string write, string destroy, string gc, string create_sid) +/* {{{ proto bool session_set_save_handler(string open, string close, string read, string write, string destroy, string gc, string create_sid) Sets user-level functions */ static PHP_FUNCTION(session_set_save_handler) { @@ -1711,7 +1854,13 @@ static PHP_FUNCTION(session_set_save_handler) zend_string *name; zend_string *ini_name, *ini_val; - if (PS(session_status) != php_session_none) { + if (PS(session_status) == php_session_active) { + php_error_docref(NULL, E_WARNING, "Cannot change save handler when session is active"); + RETURN_FALSE; + } + + if (SG(headers_sent)) { + php_error_docref(NULL, E_WARNING, "Cannot change save handler when headers already sent"); RETURN_FALSE; } @@ -1868,6 +2017,16 @@ static PHP_FUNCTION(session_save_path) return; } + if (PS(session_status) == php_session_active) { + php_error_docref(NULL, E_WARNING, "Cannot change save path when session is active"); + RETURN_FALSE; + } + + if (SG(headers_sent)) { + php_error_docref(NULL, E_WARNING, "Cannot change save path when headers already sent"); + RETURN_FALSE; + } + RETVAL_STRING(PS(save_path)); if (name) { @@ -1894,6 +2053,11 @@ static PHP_FUNCTION(session_id) return; } + if (name && SG(headers_sent)) { + php_error_docref(NULL, E_WARNING, "Cannot change session id when headers already sent"); + RETURN_FALSE; + } + if (PS(id)) { /* keep compatibility for "\0" characters ??? * see: ext/session/tests/session_id_error3.phpt */ @@ -1932,7 +2096,7 @@ static PHP_FUNCTION(session_regenerate_id) RETURN_FALSE; } - if (SG(headers_sent) && PS(use_cookies)) { + if (SG(headers_sent)) { php_error_docref(NULL, E_WARNING, "Cannot regenerate session id - headers already sent"); RETURN_FALSE; } @@ -2008,13 +2172,15 @@ static PHP_FUNCTION(session_regenerate_id) if (PS(use_cookies)) { PS(send_cookie) = 1; } - php_session_reset_id(); + if (php_session_reset_id() == FAILURE) { + RETURN_FALSE; + } RETURN_TRUE; } /* }}} */ -/* {{{ proto void session_create_id([string prefix]) +/* {{{ proto string session_create_id([string prefix]) Generate new session ID. Intended for user save handlers. */ /* This is not used yet */ static PHP_FUNCTION(session_create_id) @@ -2079,6 +2245,16 @@ static PHP_FUNCTION(session_cache_limiter) return; } + if (PS(session_status) == php_session_active) { + php_error_docref(NULL, E_WARNING, "Cannot change cache limiter when session is active"); + RETURN_FALSE; + } + + if (SG(headers_sent)) { + php_error_docref(NULL, E_WARNING, "Cannot change cache limiter when headers already sent"); + RETURN_FALSE; + } + RETVAL_STRING(PS(cache_limiter)); if (limiter) { @@ -2100,6 +2276,16 @@ static PHP_FUNCTION(session_cache_expire) return; } + if (PS(session_status) == php_session_active) { + php_error_docref(NULL, E_WARNING, "Cannot change cache expire when session is active"); + RETURN_LONG(PS(cache_expire)); + } + + if (SG(headers_sent)) { + php_error_docref(NULL, E_WARNING, "Cannot change cache expire when headers already sent"); + RETURN_FALSE; + } + RETVAL_LONG(PS(cache_expire)); if (expires) { @@ -2136,15 +2322,15 @@ static PHP_FUNCTION(session_decode) { zend_string *str = NULL; + if (zend_parse_parameters(ZEND_NUM_ARGS(), "S", &str) == FAILURE) { + return; + } + if (PS(session_status) != php_session_active) { php_error_docref(NULL, E_WARNING, "Session is not active. You cannot decode session data"); RETURN_FALSE; } - if (zend_parse_parameters(ZEND_NUM_ARGS(), "S", &str) == FAILURE) { - return; - } - if (php_session_decode(str) == FAILURE) { RETURN_FALSE; } @@ -2178,6 +2364,21 @@ static PHP_FUNCTION(session_start) RETURN_FALSE; } + if (PS(session_status) == php_session_active) { + php_error_docref(NULL, E_NOTICE, "A session had already been started - ignoring"); + RETURN_TRUE; + } + + /* + * TODO: To prevent unusable session with trans sid, actual output started status is + * required. i.e. There shouldn't be any outputs in output buffer, otherwise session + * module is unable to rewrite output. + */ + if (SG(headers_sent)) { + php_error_docref(NULL, E_WARNING, "Cannot start session when headers already sent"); + RETURN_FALSE; + } + /* set options */ if (options) { ZEND_HASH_FOREACH_KEY_VAL(Z_ARRVAL_P(options), num_idx, str_idx, value) { @@ -2209,6 +2410,12 @@ static PHP_FUNCTION(session_start) php_session_start(); if (PS(session_status) != php_session_active) { + IF_SESSION_VARS() { + zval *sess_var = Z_REFVAL(PS(http_session_vars)); + SEPARATE_ARRAY(sess_var); + /* Clean $_SESSION. */ + zend_hash_clean(Z_ARRVAL_P(sess_var)); + } RETURN_FALSE; } @@ -2232,10 +2439,14 @@ static PHP_FUNCTION(session_destroy) } /* }}} */ -/* {{{ proto void session_unset(void) +/* {{{ proto bool session_unset(void) Unset all registered variables */ static PHP_FUNCTION(session_unset) { + if (zend_parse_parameters_none() == FAILURE) { + return; + } + if (PS(session_status) != php_session_active) { RETURN_FALSE; } @@ -2247,6 +2458,7 @@ static PHP_FUNCTION(session_unset) /* Clean $_SESSION. */ zend_hash_clean(Z_ARRVAL_P(sess_var)); } + RETURN_TRUE; } /* }}} */ @@ -2275,27 +2487,51 @@ static PHP_FUNCTION(session_gc) /* }}} */ -/* {{{ proto void session_write_close(void) +/* {{{ proto bool session_write_close(void) Write session data and end session */ static PHP_FUNCTION(session_write_close) { + if (zend_parse_parameters_none() == FAILURE) { + return; + } + + if (PS(session_status) != php_session_active) { + RETURN_FALSE; + } php_session_flush(1); + RETURN_TRUE; } /* }}} */ -/* {{{ proto void session_abort(void) +/* {{{ proto bool session_abort(void) Abort session and end session. Session data will not be written */ static PHP_FUNCTION(session_abort) { + if (zend_parse_parameters_none() == FAILURE) { + return; + } + + if (PS(session_status) != php_session_active) { + RETURN_FALSE; + } php_session_abort(); + RETURN_TRUE; } /* }}} */ -/* {{{ proto void session_reset(void) +/* {{{ proto bool session_reset(void) Reset session data from saved session data */ static PHP_FUNCTION(session_reset) { + if (zend_parse_parameters_none() == FAILURE) { + return; + } + + if (PS(session_status) != php_session_active) { + RETURN_FALSE; + } php_session_reset(); + RETURN_TRUE; } /* }}} */ diff --git a/ext/session/tests/004.phpt b/ext/session/tests/004.phpt index 4547c655749..9e34b7123f9 100644 --- a/ext/session/tests/004.phpt +++ b/ext/session/tests/004.phpt @@ -11,6 +11,7 @@ session.serialize_handler=php --FILE-- --FILE-- @@ -87,4 +88,50 @@ array(2) { int(1) } } -NULL +array(5) { + ["start_time"]=> + int(%d) + ["content_length"]=> + int(469) + ["bytes_processed"]=> + int(469) + ["done"]=> + bool(true) + ["files"]=> + array(2) { + [0]=> + array(7) { + ["field_name"]=> + string(5) "file1" + ["name"]=> + string(9) "file1.txt" + ["tmp_name"]=> + string(%d) "%s" + ["error"]=> + int(0) + ["done"]=> + bool(true) + ["start_time"]=> + int(%d) + ["bytes_processed"]=> + int(1) + } + [1]=> + array(7) { + ["field_name"]=> + string(5) "file2" + ["name"]=> + string(9) "file2.txt" + ["tmp_name"]=> + string(%d) "%s" + ["error"]=> + int(0) + ["done"]=> + bool(true) + ["start_time"]=> + int(%d) + ["bytes_processed"]=> + int(1) + } + } +} diff --git a/ext/session/tests/session_basic1.phpt b/ext/session/tests/session_basic1.phpt index 8a8f4366108..fbce0890c48 100644 --- a/ext/session/tests/session_basic1.phpt +++ b/ext/session/tests/session_basic1.phpt @@ -59,12 +59,12 @@ array(1) { ["lazy_write"]=> bool(false) } -NULL +bool(true) string(6) "testid" *** With lazy_write *** string(6) "testid" bool(true) -NULL +bool(true) string(6) "testid" *** Cleanup *** string(6) "testid" diff --git a/ext/session/tests/session_basic2.phpt b/ext/session/tests/session_basic2.phpt index 179b82971ea..3406d2c03bd 100644 --- a/ext/session/tests/session_basic2.phpt +++ b/ext/session/tests/session_basic2.phpt @@ -64,13 +64,13 @@ string(0) "" string(6) "testid" bool(true) bool(true) -NULL +bool(true) string(32) "%s" *** With lazy_write *** string(32) "%s" bool(true) bool(true) -NULL +bool(true) string(32) "%s" *** Cleanup *** string(32) "%s" diff --git a/ext/session/tests/session_basic3.phpt b/ext/session/tests/session_basic3.phpt index 0337151cf00..29bda63edb0 100644 --- a/ext/session/tests/session_basic3.phpt +++ b/ext/session/tests/session_basic3.phpt @@ -344,7 +344,7 @@ ob_end_flush(); -NULL +bool(true) *** Cleanup *** bool(true) string(6) "testid" diff --git a/ext/session/tests/session_basic5.phpt b/ext/session/tests/session_basic5.phpt index 7e3bb7fc216..351c69b41d1 100644 --- a/ext/session/tests/session_basic5.phpt +++ b/ext/session/tests/session_basic5.phpt @@ -439,7 +439,7 @@ ob_end_flush(); -NULL +bool(true) *** Cleanup *** bool(true) string(6) "testid" diff --git a/ext/session/tests/session_cache_expire_basic.phpt b/ext/session/tests/session_cache_expire_basic.phpt index 71664859379..fb240006e7c 100644 --- a/ext/session/tests/session_cache_expire_basic.phpt +++ b/ext/session/tests/session_cache_expire_basic.phpt @@ -32,6 +32,8 @@ int(180) int(180) int(1234567890) bool(true) + +Warning: session_cache_expire(): Cannot change cache expire when session is active in %s on line 17 int(180) bool(true) int(180) diff --git a/ext/session/tests/session_cache_expire_variation1.phpt b/ext/session/tests/session_cache_expire_variation1.phpt index 9d0ba27fea1..1a7324935fa 100644 --- a/ext/session/tests/session_cache_expire_variation1.phpt +++ b/ext/session/tests/session_cache_expire_variation1.phpt @@ -34,6 +34,8 @@ int(360) int(360) int(1234567890) bool(true) + +Warning: session_cache_expire(): Cannot change cache expire when session is active in %s on line 17 int(180) bool(true) int(180) diff --git a/ext/session/tests/session_cache_expire_variation2.phpt b/ext/session/tests/session_cache_expire_variation2.phpt index f17f4711a90..c3daae6c556 100644 --- a/ext/session/tests/session_cache_expire_variation2.phpt +++ b/ext/session/tests/session_cache_expire_variation2.phpt @@ -33,6 +33,8 @@ int(360) int(360) int(1234567890) bool(true) + +Warning: session_cache_expire(): Cannot change cache expire when session is active in %s on line 18 int(180) bool(true) int(180) diff --git a/ext/session/tests/session_cache_expire_variation3.phpt b/ext/session/tests/session_cache_expire_variation3.phpt index c243c1f1156..d9f78df4912 100644 --- a/ext/session/tests/session_cache_expire_variation3.phpt +++ b/ext/session/tests/session_cache_expire_variation3.phpt @@ -38,6 +38,8 @@ string(3) "180" int(180) string(10) "1234567890" bool(true) + +Warning: session_cache_expire(): Cannot change cache expire when session is active in %s on line 19 int(1234567890) string(10) "1234567890" bool(true) diff --git a/ext/session/tests/session_cache_limiter_basic.phpt b/ext/session/tests/session_cache_limiter_basic.phpt index d0531878f03..559a89143c1 100644 --- a/ext/session/tests/session_cache_limiter_basic.phpt +++ b/ext/session/tests/session_cache_limiter_basic.phpt @@ -15,28 +15,28 @@ ob_start(); echo "*** Testing session_cache_limiter() : basic functionality ***\n"; -var_dump(session_start()); var_dump(session_cache_limiter()); var_dump(session_cache_limiter("public")); var_dump(session_cache_limiter()); +var_dump(session_start()); var_dump(session_destroy()); -var_dump(session_start()); var_dump(session_cache_limiter()); var_dump(session_cache_limiter("private")); var_dump(session_cache_limiter()); +var_dump(session_start()); var_dump(session_destroy()); -var_dump(session_start()); var_dump(session_cache_limiter()); var_dump(session_cache_limiter("nocache")); var_dump(session_cache_limiter()); +var_dump(session_start()); var_dump(session_destroy()); -var_dump(session_start()); var_dump(session_cache_limiter()); var_dump(session_cache_limiter("private_no_expire")); var_dump(session_cache_limiter()); +var_dump(session_start()); var_dump(session_destroy()); echo "Done"; @@ -44,7 +44,6 @@ ob_end_flush(); ?> --EXPECTF-- *** Testing session_cache_limiter() : basic functionality *** -bool(true) string(7) "nocache" string(7) "nocache" string(6) "public" @@ -64,5 +63,5 @@ string(7) "nocache" string(7) "nocache" string(17) "private_no_expire" bool(true) +bool(true) Done - diff --git a/ext/session/tests/session_cache_limiter_variation1.phpt b/ext/session/tests/session_cache_limiter_variation1.phpt index 7c6e71eb816..7ba621120dd 100644 --- a/ext/session/tests/session_cache_limiter_variation1.phpt +++ b/ext/session/tests/session_cache_limiter_variation1.phpt @@ -32,10 +32,15 @@ ob_end_flush(); *** Testing session_cache_limiter() : variation *** string(7) "nocache" bool(true) -string(7) "nocache" -string(7) "nocache" -string(6) "public" -bool(true) -string(6) "public" -Done +Warning: session_cache_limiter(): Cannot change cache limiter when session is active in %s on line 15 +bool(false) + +Warning: session_cache_limiter(): Cannot change cache limiter when session is active in %s on line 16 +bool(false) + +Warning: session_cache_limiter(): Cannot change cache limiter when session is active in %s on line 17 +bool(false) +bool(true) +string(7) "nocache" +Done diff --git a/ext/session/tests/session_cache_limiter_variation2.phpt b/ext/session/tests/session_cache_limiter_variation2.phpt index b6d97a3ddab..94571017e18 100644 --- a/ext/session/tests/session_cache_limiter_variation2.phpt +++ b/ext/session/tests/session_cache_limiter_variation2.phpt @@ -31,10 +31,15 @@ ob_end_flush(); *** Testing session_cache_limiter() : variation *** string(7) "nocache" bool(true) -string(7) "nocache" -string(7) "nocache" -string(6) "public" -bool(true) -string(6) "public" -Done +Warning: session_cache_limiter(): Cannot change cache limiter when session is active in %s on line 16 +bool(false) + +Warning: session_cache_limiter(): Cannot change cache limiter when session is active in %s on line 17 +bool(false) + +Warning: session_cache_limiter(): Cannot change cache limiter when session is active in %s on line 18 +bool(false) +bool(true) +string(7) "nocache" +Done diff --git a/ext/session/tests/session_cache_limiter_variation3.phpt b/ext/session/tests/session_cache_limiter_variation3.phpt index 7aab95b24ea..11d452d46a0 100644 --- a/ext/session/tests/session_cache_limiter_variation3.phpt +++ b/ext/session/tests/session_cache_limiter_variation3.phpt @@ -31,9 +31,10 @@ ob_end_flush(); string(7) "nocache" bool(true) string(7) "nocache" -string(7) "nocache" -string(6) "public" -bool(true) -string(6) "public" -Done +Warning: session_cache_limiter(): Cannot change cache limiter when session is active in %s on line 16 +bool(false) +string(7) "nocache" +bool(true) +string(7) "nocache" +Done diff --git a/ext/session/tests/session_commit_basic.phpt b/ext/session/tests/session_commit_basic.phpt index c20db109339..c72d3ba9270 100644 --- a/ext/session/tests/session_commit_basic.phpt +++ b/ext/session/tests/session_commit_basic.phpt @@ -32,7 +32,7 @@ ob_end_flush(); bool(true) array(0) { } -NULL +bool(true) array(0) { } bool(true) diff --git a/ext/session/tests/session_commit_error.phpt b/ext/session/tests/session_commit_error.phpt index b867572ebcd..79fa72e67b5 100644 --- a/ext/session/tests/session_commit_error.phpt +++ b/ext/session/tests/session_commit_error.phpt @@ -96,75 +96,122 @@ ob_end_flush(); *** Testing session_commit() : error functionality *** -- Iteration 1 -- + +Warning: session_commit() expects exactly 0 parameters, 1 given in %s on line 82 NULL -- Iteration 2 -- + +Warning: session_commit() expects exactly 0 parameters, 1 given in %s on line 82 NULL -- Iteration 3 -- + +Warning: session_commit() expects exactly 0 parameters, 1 given in %s on line 82 NULL -- Iteration 4 -- + +Warning: session_commit() expects exactly 0 parameters, 1 given in %s on line 82 NULL -- Iteration 5 -- + +Warning: session_commit() expects exactly 0 parameters, 1 given in %s on line 82 NULL -- Iteration 6 -- + +Warning: session_commit() expects exactly 0 parameters, 1 given in %s on line 82 NULL -- Iteration 7 -- + +Warning: session_commit() expects exactly 0 parameters, 1 given in %s on line 82 NULL -- Iteration 8 -- + +Warning: session_commit() expects exactly 0 parameters, 1 given in %s on line 82 NULL -- Iteration 9 -- + +Warning: session_commit() expects exactly 0 parameters, 1 given in %s on line 82 NULL -- Iteration 10 -- + +Warning: session_commit() expects exactly 0 parameters, 1 given in %s on line 82 NULL -- Iteration 11 -- + +Warning: session_commit() expects exactly 0 parameters, 1 given in %s on line 82 NULL -- Iteration 12 -- + +Warning: session_commit() expects exactly 0 parameters, 1 given in %s on line 82 NULL -- Iteration 13 -- + +Warning: session_commit() expects exactly 0 parameters, 1 given in %s on line 82 NULL -- Iteration 14 -- + +Warning: session_commit() expects exactly 0 parameters, 1 given in %s on line 82 NULL -- Iteration 15 -- + +Warning: session_commit() expects exactly 0 parameters, 1 given in %s on line 82 NULL -- Iteration 16 -- + +Warning: session_commit() expects exactly 0 parameters, 1 given in %s on line 82 NULL -- Iteration 17 -- + +Warning: session_commit() expects exactly 0 parameters, 1 given in %s on line 82 NULL -- Iteration 18 -- + +Warning: session_commit() expects exactly 0 parameters, 1 given in %s on line 82 NULL -- Iteration 19 -- + +Warning: session_commit() expects exactly 0 parameters, 1 given in %s on line 82 NULL -- Iteration 20 -- + +Warning: session_commit() expects exactly 0 parameters, 1 given in %s on line 82 NULL -- Iteration 21 -- + +Warning: session_commit() expects exactly 0 parameters, 1 given in %s on line 82 NULL -- Iteration 22 -- + +Warning: session_commit() expects exactly 0 parameters, 1 given in %s on line 82 NULL -- Iteration 23 -- + +Warning: session_commit() expects exactly 0 parameters, 1 given in %s on line 82 NULL -- Iteration 24 -- + +Warning: session_commit() expects exactly 0 parameters, 1 given in %s on line 82 NULL Done - diff --git a/ext/session/tests/session_commit_variation1.phpt b/ext/session/tests/session_commit_variation1.phpt index 81240dac825..a58a5624834 100644 --- a/ext/session/tests/session_commit_variation1.phpt +++ b/ext/session/tests/session_commit_variation1.phpt @@ -30,12 +30,11 @@ ob_end_flush(); --EXPECTF-- *** Testing session_commit() : variation *** bool(true) -NULL -NULL -NULL -NULL -NULL +bool(true) +bool(false) +bool(false) +bool(false) +bool(false) bool(true) bool(true) Done - diff --git a/ext/session/tests/session_commit_variation2.phpt b/ext/session/tests/session_commit_variation2.phpt index b38885a8d91..9bde83ce0a4 100644 --- a/ext/session/tests/session_commit_variation2.phpt +++ b/ext/session/tests/session_commit_variation2.phpt @@ -38,19 +38,19 @@ ob_end_flush(); bool(true) array(0) { } -NULL +bool(true) array(0) { } bool(true) array(0) { } -NULL +bool(true) array(0) { } bool(true) array(0) { } -NULL +bool(true) array(0) { } bool(true) diff --git a/ext/session/tests/session_commit_variation3.phpt b/ext/session/tests/session_commit_variation3.phpt index 998e60340f3..ed4618a04e4 100644 --- a/ext/session/tests/session_commit_variation3.phpt +++ b/ext/session/tests/session_commit_variation3.phpt @@ -30,7 +30,7 @@ ob_end_flush(); *** Testing session_commit() : variation *** array(0) { } -NULL +bool(true) array(0) { } bool(true) diff --git a/ext/session/tests/session_commit_variation4.phpt b/ext/session/tests/session_commit_variation4.phpt index fdc4ca51864..fb3ea73058d 100644 --- a/ext/session/tests/session_commit_variation4.phpt +++ b/ext/session/tests/session_commit_variation4.phpt @@ -45,16 +45,16 @@ string(1) "0" string(0) "" bool(true) string(4) "test" -NULL +bool(true) string(4) "test" bool(true) string(1) "0" string(4) "test" -NULL +bool(true) string(4) "test" bool(true) string(4) "test" -NULL +bool(true) string(4) "test" bool(true) bool(true) diff --git a/ext/session/tests/session_commit_variation5.phpt b/ext/session/tests/session_commit_variation5.phpt index 62bd1c15113..8b3535ba951 100644 --- a/ext/session/tests/session_commit_variation5.phpt +++ b/ext/session/tests/session_commit_variation5.phpt @@ -49,19 +49,19 @@ string(0) "" bool(true) string(32) "%s" bool(true) -NULL +bool(true) +bool(true) +string(32) "%s" +bool(true) bool(true) string(32) "%s" bool(true) bool(true) string(32) "%s" -NULL -bool(true) -string(32) "%s" bool(true) bool(true) string(32) "%s" -NULL +bool(true) bool(true) string(32) "%s" bool(true) diff --git a/ext/session/tests/session_encode_variation1.phpt b/ext/session/tests/session_encode_variation1.phpt index ce3a9216594..26722783db8 100644 --- a/ext/session/tests/session_encode_variation1.phpt +++ b/ext/session/tests/session_encode_variation1.phpt @@ -35,7 +35,7 @@ Warning: session_encode(): Cannot encode non-existent session in %s on line %d bool(false) bool(true) bool(false) -NULL +bool(true) bool(false) bool(true) bool(false) diff --git a/ext/session/tests/session_get_cookie_params_basic.phpt b/ext/session/tests/session_get_cookie_params_basic.phpt index e984f556e09..5d328550eae 100644 --- a/ext/session/tests/session_get_cookie_params_basic.phpt +++ b/ext/session/tests/session_get_cookie_params_basic.phpt @@ -44,7 +44,7 @@ array(5) { ["httponly"]=> bool(false) } -NULL +bool(true) array(5) { ["lifetime"]=> int(3600) @@ -57,7 +57,7 @@ array(5) { ["httponly"]=> bool(false) } -NULL +bool(true) array(5) { ["lifetime"]=> int(1234567890) diff --git a/ext/session/tests/session_ini_set.phpt b/ext/session/tests/session_ini_set.phpt new file mode 100644 index 00000000000..58c3f837a7e --- /dev/null +++ b/ext/session/tests/session_ini_set.phpt @@ -0,0 +1,182 @@ +--TEST-- +Test ini_set() for session : basic functionality +--SKIPIF-- + +--INI-- +session.save_path= +session.name="PHPSESSID" +session.save_handler="files" +session.auto_start="0" +session.gc_probability="1" +session.gc_divisor="100" +session.gc_maxlifetime="1440" +session.serialize_handler="php" +session.cookie_path="/" +session.cookie_domain="" +session.cookie_secure="0" +session.cookie_httponly="0" +session.use_cookies="1" +session.use_only_cookies="1" +session.use_strict_mode="0" +session.referer_check="" +session.cache_limiter="nocache" +session.cache_expire="180" +session.use_trans_sid="0" +session.sid_length="32" +session.sid_bits_per_character="4" +session.lazy_write="1" +--FILE-- + +--EXPECTF-- +*** Testing ini_set() for session ini: basic functionality *** +string(0) "" +string(9) "PHPSESSID" +string(5) "files" +bool(false) +string(1) "1" +string(3) "100" +string(4) "1440" +string(3) "php" +string(1) "/" +string(0) "" +string(1) "0" +string(1) "0" +string(1) "1" +string(1) "1" +string(1) "0" +string(0) "" +string(7) "nocache" +string(3) "180" +string(1) "0" +string(2) "32" +string(1) "4" +string(1) "1" +string(15) "session started" + +Warning: ini_set(): A session is active. You cannot change the session module's ini settings at this time in %s on line 38 +bool(false) + +Warning: ini_set(): A session is active. You cannot change the session module's ini settings at this time in %s on line 39 +bool(false) + +Warning: ini_set(): A session is active. You cannot change the session module's ini settings at this time in %s on line 40 +bool(false) +bool(false) + +Warning: ini_set(): A session is active. You cannot change the session module's ini settings at this time in %s on line 42 +bool(false) + +Warning: ini_set(): A session is active. You cannot change the session module's ini settings at this time in %s on line 43 +bool(false) + +Warning: ini_set(): A session is active. You cannot change the session module's ini settings at this time in %s on line 44 +bool(false) + +Warning: ini_set(): A session is active. You cannot change the session module's ini settings at this time in %s on line 45 +bool(false) + +Warning: ini_set(): A session is active. You cannot change the session module's ini settings at this time in %s on line 46 +bool(false) + +Warning: ini_set(): A session is active. You cannot change the session module's ini settings at this time in %s on line 47 +bool(false) + +Warning: ini_set(): A session is active. You cannot change the session module's ini settings at this time in %s on line 48 +bool(false) + +Warning: ini_set(): A session is active. You cannot change the session module's ini settings at this time in %s on line 49 +bool(false) + +Warning: ini_set(): A session is active. You cannot change the session module's ini settings at this time in %s on line 50 +bool(false) + +Warning: ini_set(): A session is active. You cannot change the session module's ini settings at this time in %s on line 51 +bool(false) + +Warning: ini_set(): A session is active. You cannot change the session module's ini settings at this time in %s on line 52 +bool(false) + +Warning: ini_set(): A session is active. You cannot change the session module's ini settings at this time in %s on line 53 +bool(false) + +Warning: ini_set(): A session is active. You cannot change the session module's ini settings at this time in %s on line 54 +bool(false) + +Warning: ini_set(): A session is active. You cannot change the session module's ini settings at this time in %s on line 55 +bool(false) + +Warning: ini_set(): A session is active. You cannot change the session module's ini settings at this time in %s on line 56 +bool(false) + +Warning: ini_set(): A session is active. You cannot change the session module's ini settings at this time in %s on line 57 +bool(false) + +Warning: ini_set(): A session is active. You cannot change the session module's ini settings at this time in %s on line 58 +bool(false) + +Warning: ini_set(): A session is active. You cannot change the session module's ini settings at this time in %s on line 59 +bool(false) +Done diff --git a/ext/session/tests/session_module_name_variation3.phpt b/ext/session/tests/session_module_name_variation3.phpt index de49195fe84..22eb9e774f2 100644 --- a/ext/session/tests/session_module_name_variation3.phpt +++ b/ext/session/tests/session_module_name_variation3.phpt @@ -38,14 +38,14 @@ ob_end_flush(); ?> --EXPECTF-- *** Testing session_module_name() : variation *** -string(%d) "%s" +string(5) "files" string(4) "user" -Warning: Uncaught Exception: Stop...! in %s:%d +Warning: session_start(): Failed to initialize storage module: user (path: ) in %s on line 25 + +Fatal error: Uncaught Exception: Stop...! in %s:13 Stack trace: #0 [internal function]: open('', 'PHPSESSID') -#1 %s(%d): session_start() +#1 %s(25): session_start() #2 {main} - thrown in %s on line %d - -Fatal error: session_start(): Failed to initialize storage module: %s in %s%esession_module_name_variation3.php on line %d + thrown in %s on line 13 diff --git a/ext/session/tests/session_module_name_variation4.phpt b/ext/session/tests/session_module_name_variation4.phpt index 0748b3db2fe..3fd42e46d72 100644 --- a/ext/session/tests/session_module_name_variation4.phpt +++ b/ext/session/tests/session_module_name_variation4.phpt @@ -51,7 +51,7 @@ array(3) { ["Guff"]=> int(1234567890) } -NULL +bool(true) array(3) { ["Blah"]=> string(12) "Hello World!" diff --git a/ext/session/tests/session_save_path_error.phpt b/ext/session/tests/session_save_path_error.phpt index 815feee6ba5..8c940d0b4fb 100644 --- a/ext/session/tests/session_save_path_error.phpt +++ b/ext/session/tests/session_save_path_error.phpt @@ -84,7 +84,6 @@ $inputs = array( /*24*/ $fp ); -session_start(); $iterator = 1; foreach($inputs as $input) { @@ -93,7 +92,6 @@ foreach($inputs as $input) { $iterator++; }; -session_destroy(); fclose($fp); echo "Done"; ob_end_flush(); diff --git a/ext/session/tests/session_save_path_variation1.phpt b/ext/session/tests/session_save_path_variation1.phpt index d5f64d9851f..907cf77940e 100644 --- a/ext/session/tests/session_save_path_variation1.phpt +++ b/ext/session/tests/session_save_path_variation1.phpt @@ -11,21 +11,25 @@ session.name=PHPSESSID ob_start(); -/* +/* * Prototype : string session_save_path([string $path]) * Description : Get and/or set the current session save path - * Source code : ext/session/session.c + * Source code : ext/session/session.c */ echo "*** Testing session_save_path() : variation ***\n"; $directory = dirname(__FILE__); var_dump(session_save_path()); +var_dump(session_save_path($directory)); +var_dump(session_save_path()); + var_dump(session_start()); var_dump(session_save_path()); var_dump(session_save_path($directory)); var_dump(session_save_path()); var_dump(session_destroy()); + var_dump(session_save_path()); echo "Done"; @@ -34,11 +38,18 @@ ob_end_flush(); --EXPECTF-- *** Testing session_save_path() : variation *** string(0) "" -bool(true) string(0) "" -string(0) "" -string(%d) "%s" +string(%d) "%stests" bool(true) -string(%d) "%s" -Done +Warning: session_save_path(): Cannot change save path when session is active in %s on line 19 +bool(false) + +Warning: session_save_path(): Cannot change save path when session is active in %s on line 20 +bool(false) + +Warning: session_save_path(): Cannot change save path when session is active in %s on line 21 +bool(false) +bool(true) +string(%d) "%stests" +Done diff --git a/ext/session/tests/session_save_path_variation4.phpt b/ext/session/tests/session_save_path_variation4.phpt index a4c4e995d38..f18b72d796b 100644 --- a/ext/session/tests/session_save_path_variation4.phpt +++ b/ext/session/tests/session_save_path_variation4.phpt @@ -51,9 +51,17 @@ var_dump(rmdir($sessions)); bool(true) bool(true) -Warning: ini_set(): open_basedir restriction in effect. File(%s) is not within the allowed path(s): (.) in %s on line %d +Warning: ini_set(): open_basedir restriction in effect. File(%s) is not within the allowed path(s): (.) in %s on line 24 string(0) "" -Warning: session_start(): open_basedir restriction in effect. File(%s) is not within the allowed path(s): (.) in %s on line %d +Warning: session_start(): open_basedir restriction in effect. File(%s) is not within the allowed path(s): (.) in %s on line 26 -Fatal error: session_start(): Failed to initialize storage module: files (path: ) in %s on line %d +Warning: session_start(): Failed to initialize storage module: files (path: ) in %s on line 26 +bool(false) +string(0) "" + +Warning: session_destroy(): Trying to destroy uninitialized session in %s on line 28 +bool(false) +string(0) "" +bool(true) +Done diff --git a/ext/session/tests/session_set_cookie_params_basic.phpt b/ext/session/tests/session_set_cookie_params_basic.phpt index 5055d1c6985..a67aaa2bc4b 100644 --- a/ext/session/tests/session_set_cookie_params_basic.phpt +++ b/ext/session/tests/session_set_cookie_params_basic.phpt @@ -26,10 +26,11 @@ ob_end_flush(); ?> --EXPECTF-- *** Testing session_set_cookie_params() : basic functionality *** -NULL bool(true) -NULL bool(true) -NULL -Done +Warning: session_set_cookie_params(): Cannot change session cookie parameters when session is active in %s on line 15 +bool(false) +bool(true) +bool(true) +Done diff --git a/ext/session/tests/session_set_cookie_params_error.phpt b/ext/session/tests/session_set_cookie_params_error.phpt index 0dc53107618..9e68ab0359e 100644 --- a/ext/session/tests/session_set_cookie_params_error.phpt +++ b/ext/session/tests/session_set_cookie_params_error.phpt @@ -100,207 +100,210 @@ ob_end_flush(); *** Testing session_set_cookie_params() : error functionality *** -- Iteration 1 -- -NULL -NULL -NULL -NULL -NULL -NULL +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) -- Iteration 2 -- -NULL -NULL -NULL -NULL -NULL -NULL +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) -- Iteration 3 -- -NULL -NULL -NULL -NULL -NULL -NULL +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) -- Iteration 4 -- -NULL -NULL -NULL -NULL -NULL -NULL + +Warning: session_set_cookie_params(): CookieLifetime cannot be negative in %s on line 81 +bool(false) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) -- Iteration 5 -- -NULL -NULL -NULL -NULL -NULL -NULL +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) -- Iteration 6 -- -NULL -NULL -NULL -NULL -NULL -NULL + +Warning: session_set_cookie_params(): CookieLifetime cannot be negative in %s on line 81 +bool(false) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) -- Iteration 7 -- -NULL -NULL -NULL -NULL -NULL -NULL +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) -- Iteration 8 -- -NULL -NULL -NULL -NULL -NULL -NULL +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) -- Iteration 9 -- -NULL -NULL -NULL -NULL -NULL -NULL +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) -- Iteration 10 -- -NULL -NULL -NULL -NULL -NULL -NULL +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) -- Iteration 11 -- -NULL -NULL -NULL -NULL -NULL -NULL +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) -- Iteration 12 -- -NULL -NULL -NULL -NULL -NULL -NULL +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) -- Iteration 13 -- -NULL -NULL -NULL -NULL -NULL -NULL +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) -- Iteration 14 -- -NULL -NULL -NULL -NULL -NULL -NULL +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) -- Iteration 15 -- -NULL -NULL -NULL -NULL -NULL -NULL +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) -- Iteration 16 -- -NULL -NULL -NULL -NULL -NULL -NULL +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) -- Iteration 17 -- -NULL -NULL -NULL -NULL -NULL -NULL +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) -- Iteration 18 -- -NULL -NULL -NULL -NULL -NULL -NULL +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) -- Iteration 19 -- -NULL -NULL -NULL -NULL -NULL -NULL +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) -- Iteration 20 -- -NULL -NULL -NULL -NULL -NULL -NULL +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) -- Iteration 21 -- -NULL -NULL +bool(true) +bool(true) +bool(true) + +Warning: session_set_cookie_params() expects parameter 4 to be boolean, object given in %s on line 84 NULL -Warning: session_set_cookie_params() expects parameter 4 to be boolean, object given in %s on line %d -NULL - -Warning: session_set_cookie_params() expects parameter 5 to be boolean, object given in %s on line %d -NULL +Warning: session_set_cookie_params() expects parameter 5 to be boolean, object given in %s on line 85 NULL +bool(true) -- Iteration 22 -- -NULL -NULL -NULL -NULL -NULL -NULL +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) -- Iteration 23 -- -NULL -NULL -NULL -NULL -NULL -NULL +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) -- Iteration 24 -- +bool(true) + +Warning: session_set_cookie_params() expects parameter 2 to be string, resource given in %s on line 82 NULL -Warning: session_set_cookie_params() expects parameter 2 to be string, resource given in %s on line %d +Warning: session_set_cookie_params() expects parameter 3 to be string, resource given in %s on line 83 NULL -Warning: session_set_cookie_params() expects parameter 3 to be string, resource given in %s on line %d +Warning: session_set_cookie_params() expects parameter 4 to be boolean, resource given in %s on line 84 NULL -Warning: session_set_cookie_params() expects parameter 4 to be boolean, resource given in %s on line %d -NULL - -Warning: session_set_cookie_params() expects parameter 5 to be boolean, resource given in %s on line %d -NULL +Warning: session_set_cookie_params() expects parameter 5 to be boolean, resource given in %s on line 85 NULL +bool(true) Done - diff --git a/ext/session/tests/session_set_cookie_params_variation1.phpt b/ext/session/tests/session_set_cookie_params_variation1.phpt index 02b901f3cf0..93ac056d898 100644 --- a/ext/session/tests/session_set_cookie_params_variation1.phpt +++ b/ext/session/tests/session_set_cookie_params_variation1.phpt @@ -20,11 +20,13 @@ echo "*** Testing session_set_cookie_params() : variation ***\n"; var_dump(ini_get("session.cookie_lifetime")); var_dump(session_set_cookie_params(3600)); var_dump(ini_get("session.cookie_lifetime")); + var_dump(session_start()); var_dump(ini_get("session.cookie_lifetime")); var_dump(session_set_cookie_params(1800)); var_dump(ini_get("session.cookie_lifetime")); var_dump(session_destroy()); + var_dump(ini_get("session.cookie_lifetime")); var_dump(session_set_cookie_params(1234567890)); var_dump(ini_get("session.cookie_lifetime")); @@ -35,15 +37,16 @@ ob_end_flush(); --EXPECTF-- *** Testing session_set_cookie_params() : variation *** string(4) "3600" -NULL +bool(true) +string(4) "3600" +bool(true) +string(4) "3600" + +Warning: session_set_cookie_params(): Cannot change session cookie parameters when session is active in %s on line 19 +bool(false) string(4) "3600" bool(true) string(4) "3600" -NULL -string(4) "1800" bool(true) -string(4) "1800" -NULL string(10) "1234567890" Done - diff --git a/ext/session/tests/session_set_cookie_params_variation2.phpt b/ext/session/tests/session_set_cookie_params_variation2.phpt index 5d7a01096f2..1bf9bae848c 100644 --- a/ext/session/tests/session_set_cookie_params_variation2.phpt +++ b/ext/session/tests/session_set_cookie_params_variation2.phpt @@ -35,15 +35,16 @@ ob_end_flush(); --EXPECTF-- *** Testing session_set_cookie_params() : variation *** string(5) "/path" -NULL +bool(true) +string(4) "/foo" +bool(true) +string(4) "/foo" + +Warning: session_set_cookie_params(): Cannot change session cookie parameters when session is active in %s on line 18 +bool(false) string(4) "/foo" bool(true) string(4) "/foo" -NULL -string(5) "/blah" bool(true) -string(5) "/blah" -NULL string(5) "/guff" Done - diff --git a/ext/session/tests/session_set_cookie_params_variation3.phpt b/ext/session/tests/session_set_cookie_params_variation3.phpt index 5e8f0ff5721..17d1e6a7713 100644 --- a/ext/session/tests/session_set_cookie_params_variation3.phpt +++ b/ext/session/tests/session_set_cookie_params_variation3.phpt @@ -35,15 +35,16 @@ ob_end_flush(); --EXPECTF-- *** Testing session_set_cookie_params() : variation *** string(3) "foo" -NULL +bool(true) +string(4) "blah" +bool(true) +string(4) "blah" + +Warning: session_set_cookie_params(): Cannot change session cookie parameters when session is active in %s on line 18 +bool(false) string(4) "blah" bool(true) string(4) "blah" -NULL -string(4) "guff" bool(true) -string(4) "guff" -NULL string(3) "foo" Done - diff --git a/ext/session/tests/session_set_cookie_params_variation4.phpt b/ext/session/tests/session_set_cookie_params_variation4.phpt index 7b825968f80..2b10f3cc82b 100644 --- a/ext/session/tests/session_set_cookie_params_variation4.phpt +++ b/ext/session/tests/session_set_cookie_params_variation4.phpt @@ -35,15 +35,16 @@ ob_end_flush(); --EXPECTF-- *** Testing session_set_cookie_params() : variation *** string(1) "1" -NULL +bool(true) +string(1) "0" +bool(true) +string(1) "0" + +Warning: session_set_cookie_params(): Cannot change session cookie parameters when session is active in %s on line 18 +bool(false) string(1) "0" bool(true) string(1) "0" -NULL -string(1) "1" bool(true) -string(1) "1" -NULL string(1) "0" Done - diff --git a/ext/session/tests/session_set_cookie_params_variation5.phpt b/ext/session/tests/session_set_cookie_params_variation5.phpt index 29559f7fd6c..ffdd29db2d4 100644 --- a/ext/session/tests/session_set_cookie_params_variation5.phpt +++ b/ext/session/tests/session_set_cookie_params_variation5.phpt @@ -35,15 +35,16 @@ ob_end_flush(); --EXPECTF-- *** Testing session_set_cookie_params() : variation *** string(1) "1" -NULL +bool(true) +string(1) "0" +bool(true) +string(1) "0" + +Warning: session_set_cookie_params(): Cannot change session cookie parameters when session is active in %s on line 18 +bool(false) string(1) "0" bool(true) string(1) "0" -NULL -string(1) "1" bool(true) -string(1) "1" -NULL string(1) "0" Done - diff --git a/ext/session/tests/session_set_save_handler_class_005.phpt b/ext/session/tests/session_set_save_handler_class_005.phpt index 1b8c1ce645e..b195fc4a53a 100644 --- a/ext/session/tests/session_set_save_handler_class_005.phpt +++ b/ext/session/tests/session_set_save_handler_class_005.phpt @@ -50,7 +50,7 @@ Warning: SessionHandler::close(): Parent session handler is not open in %ssessio Warning: session_start(): Failed to read session data: user (%s) in %ssession_set_save_handler_class_005.php on line %d bool(false) -string(%d) "%s" +string(0) "" string(4) "user" array(0) { } diff --git a/ext/session/tests/session_set_save_handler_class_012.phpt b/ext/session/tests/session_set_save_handler_class_012.phpt index 0ce03f865e4..3671cebe2be 100644 --- a/ext/session/tests/session_set_save_handler_class_012.phpt +++ b/ext/session/tests/session_set_save_handler_class_012.phpt @@ -55,7 +55,7 @@ Warning: SessionHandler::close(): Parent session handler is not open in %s on li Warning: session_start(): Failed to read session data: user (%s) in %s on line %d bool(false) -string(%d) "%s" +string(0) "" string(5) "files" string(4) "user" int(2) diff --git a/ext/session/tests/session_set_save_handler_error3.phpt b/ext/session/tests/session_set_save_handler_error3.phpt index fdf306a4a52..b6e0ecf0dbe 100644 --- a/ext/session/tests/session_set_save_handler_error3.phpt +++ b/ext/session/tests/session_set_save_handler_error3.phpt @@ -34,11 +34,11 @@ ob_end_flush(); --EXPECTF-- *** Testing session_set_save_handler() : error functionality *** -Warning: Uncaught Exception: Do something bad..! in %s:%d +Warning: session_start(): Failed to initialize storage module: user (path: ) in %s on line 23 + +Fatal error: Uncaught Exception: Do something bad..! in %s:13 Stack trace: #0 [internal function]: open('', 'PHPSESSID') -#1 %s(%d): session_start() +#1 %s(23): session_start() #2 {main} - thrown in %s on line %d - -Fatal error: session_start(): Failed to initialize storage module: %s in %ssession_set_save_handler_error3.php on line %d + thrown in %s on line 13 diff --git a/ext/session/tests/session_set_save_handler_variation2.phpt b/ext/session/tests/session_set_save_handler_variation2.phpt index 1c019bb5a60..71f533d93d3 100644 --- a/ext/session/tests/session_set_save_handler_variation2.phpt +++ b/ext/session/tests/session_set_save_handler_variation2.phpt @@ -28,6 +28,8 @@ ob_end_flush(); *** Testing session_set_save_handler() : variation *** bool(true) + +Warning: session_set_save_handler(): Cannot change save handler when session is active in %s on line 17 bool(false) bool(true) diff --git a/ext/session/tests/session_set_save_handler_variation3.phpt b/ext/session/tests/session_set_save_handler_variation3.phpt index 774d0db489a..7ac98342762 100644 --- a/ext/session/tests/session_set_save_handler_variation3.phpt +++ b/ext/session/tests/session_set_save_handler_variation3.phpt @@ -19,6 +19,7 @@ echo "*** Testing session_set_save_handler() : variation ***\n"; require_once "save_handler.inc"; $path = dirname(__FILE__); +var_dump(session_status()); session_save_path($path); var_dump(session_set_save_handler("open", "close", "read", "write", "destroy", "gc")); var_dump(session_destroy()); @@ -28,6 +29,10 @@ ob_end_flush(); --EXPECTF-- *** Testing session_set_save_handler() : variation *** +int(2) + +Warning: session_save_path(): Cannot change save path when session is active in %s on line 16 + +Warning: session_set_save_handler(): Cannot change save handler when session is active in %s on line 17 bool(false) bool(true) - diff --git a/ext/session/tests/session_set_save_handler_variation4.phpt b/ext/session/tests/session_set_save_handler_variation4.phpt index a711fdea598..70a964d187d 100644 --- a/ext/session/tests/session_set_save_handler_variation4.phpt +++ b/ext/session/tests/session_set_save_handler_variation4.phpt @@ -65,7 +65,7 @@ array(3) { } Write [%s,%s,Blah|s:12:"Hello World!";Foo|b:0;Guff|i:1234567890;] Close [%s,PHPSESSID] -NULL +bool(true) Open [%s,PHPSESSID] Read [%s,%s] GC [0] diff --git a/ext/session/tests/session_set_save_handler_variation5.phpt b/ext/session/tests/session_set_save_handler_variation5.phpt index 6ad600e4d18..fc6f2d59376 100644 --- a/ext/session/tests/session_set_save_handler_variation5.phpt +++ b/ext/session/tests/session_set_save_handler_variation5.phpt @@ -69,7 +69,7 @@ bool(true) string(%d) "PHPT-%d" Write [%s,PHPT-%d,] Close [%s,PHPSESSID] -NULL +bool(true) string(%d) "PHPT-%d" *** With lazy_write *** string(%d) "PHPT-%d" @@ -82,7 +82,7 @@ GC [0] bool(true) Write [%s,PHPT-%d,] Close [%s,PHPSESSID] -NULL +bool(true) string(%d) "PHPT-%d" *** Cleanup *** string(%d) "PHPT-%d" diff --git a/ext/session/tests/session_start_variation1.phpt b/ext/session/tests/session_start_variation1.phpt index 1c8f3eb3b85..e7eba3d28ba 100644 --- a/ext/session/tests/session_start_variation1.phpt +++ b/ext/session/tests/session_start_variation1.phpt @@ -29,16 +29,15 @@ ob_end_flush(); *** Testing session_start() : variation *** bool(true) -Notice: A session had already been started - ignoring session_start() in %s on line %d +Notice: session_start(): A session had already been started - ignoring in %s on line 14 bool(true) -Notice: A session had already been started - ignoring session_start() in %s on line %d +Notice: session_start(): A session had already been started - ignoring in %s on line 15 bool(true) -Notice: A session had already been started - ignoring session_start() in %s on line %d +Notice: session_start(): A session had already been started - ignoring in %s on line 16 bool(true) -Notice: A session had already been started - ignoring session_start() in %s on line %d +Notice: session_start(): A session had already been started - ignoring in %s on line 17 bool(true) Done - diff --git a/ext/session/tests/session_start_variation3.phpt b/ext/session/tests/session_start_variation3.phpt index e87f84bcea4..9ff1ff0139d 100644 --- a/ext/session/tests/session_start_variation3.phpt +++ b/ext/session/tests/session_start_variation3.phpt @@ -33,17 +33,16 @@ ob_end_flush(); --EXPECTF-- *** Testing session_start() : variation *** bool(true) -NULL bool(true) -NULL bool(true) -NULL bool(true) -NULL bool(true) -NULL +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) -Warning: session_destroy(): Trying to destroy uninitialized session in %s on line %d +Warning: session_destroy(): Trying to destroy uninitialized session in %s on line 23 bool(false) Done - diff --git a/ext/session/tests/session_start_variation5.phpt b/ext/session/tests/session_start_variation5.phpt index 4dcafac3308..bbc987e3c84 100644 --- a/ext/session/tests/session_start_variation5.phpt +++ b/ext/session/tests/session_start_variation5.phpt @@ -43,7 +43,7 @@ array(4) { ["age"]=> int(6) } -NULL +bool(true) array(4) { ["colour"]=> string(5) "green" diff --git a/ext/session/tests/session_start_variation6.phpt b/ext/session/tests/session_start_variation6.phpt index 378554bbe39..56471cc7f33 100644 --- a/ext/session/tests/session_start_variation6.phpt +++ b/ext/session/tests/session_start_variation6.phpt @@ -44,7 +44,7 @@ array(4) { ["age"]=> int(6) } -NULL +bool(true) array(4) { ["colour"]=> string(5) "green" diff --git a/ext/session/tests/session_start_variation9.phpt b/ext/session/tests/session_start_variation9.phpt index 21523e0657f..2629b074b6a 100644 --- a/ext/session/tests/session_start_variation9.phpt +++ b/ext/session/tests/session_start_variation9.phpt @@ -30,10 +30,9 @@ ob_end_flush(); *** Testing session_start() : variation *** string(%d) "%s" -Notice: A session had already been started - ignoring session_start() in %s on line %d +Notice: session_start(): A session had already been started - ignoring in %s on line 14 bool(true) string(%d) "%s" bool(true) string(0) "" Done - diff --git a/ext/session/tests/session_unset_basic.phpt b/ext/session/tests/session_unset_basic.phpt index 21b12c4ddcd..2e4d3bf5e86 100644 --- a/ext/session/tests/session_unset_basic.phpt +++ b/ext/session/tests/session_unset_basic.phpt @@ -33,7 +33,7 @@ array(1) { ["foo"]=> string(12) "Hello World!" } -NULL +bool(true) array(0) { } bool(true) diff --git a/ext/session/tests/session_unset_error.phpt b/ext/session/tests/session_unset_error.phpt index 9478345508c..e371bcb4096 100644 --- a/ext/session/tests/session_unset_error.phpt +++ b/ext/session/tests/session_unset_error.phpt @@ -96,75 +96,122 @@ ob_end_flush(); *** Testing session_unset() : error functionality *** -- Iteration 1 -- -bool(false) + +Warning: session_unset() expects exactly 0 parameters, 1 given in %s on line 82 +NULL -- Iteration 2 -- -bool(false) + +Warning: session_unset() expects exactly 0 parameters, 1 given in %s on line 82 +NULL -- Iteration 3 -- -bool(false) + +Warning: session_unset() expects exactly 0 parameters, 1 given in %s on line 82 +NULL -- Iteration 4 -- -bool(false) + +Warning: session_unset() expects exactly 0 parameters, 1 given in %s on line 82 +NULL -- Iteration 5 -- -bool(false) + +Warning: session_unset() expects exactly 0 parameters, 1 given in %s on line 82 +NULL -- Iteration 6 -- -bool(false) + +Warning: session_unset() expects exactly 0 parameters, 1 given in %s on line 82 +NULL -- Iteration 7 -- -bool(false) + +Warning: session_unset() expects exactly 0 parameters, 1 given in %s on line 82 +NULL -- Iteration 8 -- -bool(false) + +Warning: session_unset() expects exactly 0 parameters, 1 given in %s on line 82 +NULL -- Iteration 9 -- -bool(false) + +Warning: session_unset() expects exactly 0 parameters, 1 given in %s on line 82 +NULL -- Iteration 10 -- -bool(false) + +Warning: session_unset() expects exactly 0 parameters, 1 given in %s on line 82 +NULL -- Iteration 11 -- -bool(false) + +Warning: session_unset() expects exactly 0 parameters, 1 given in %s on line 82 +NULL -- Iteration 12 -- -bool(false) + +Warning: session_unset() expects exactly 0 parameters, 1 given in %s on line 82 +NULL -- Iteration 13 -- -bool(false) + +Warning: session_unset() expects exactly 0 parameters, 1 given in %s on line 82 +NULL -- Iteration 14 -- -bool(false) + +Warning: session_unset() expects exactly 0 parameters, 1 given in %s on line 82 +NULL -- Iteration 15 -- -bool(false) + +Warning: session_unset() expects exactly 0 parameters, 1 given in %s on line 82 +NULL -- Iteration 16 -- -bool(false) + +Warning: session_unset() expects exactly 0 parameters, 1 given in %s on line 82 +NULL -- Iteration 17 -- -bool(false) + +Warning: session_unset() expects exactly 0 parameters, 1 given in %s on line 82 +NULL -- Iteration 18 -- -bool(false) + +Warning: session_unset() expects exactly 0 parameters, 1 given in %s on line 82 +NULL -- Iteration 19 -- -bool(false) + +Warning: session_unset() expects exactly 0 parameters, 1 given in %s on line 82 +NULL -- Iteration 20 -- -bool(false) + +Warning: session_unset() expects exactly 0 parameters, 1 given in %s on line 82 +NULL -- Iteration 21 -- -bool(false) + +Warning: session_unset() expects exactly 0 parameters, 1 given in %s on line 82 +NULL -- Iteration 22 -- -bool(false) + +Warning: session_unset() expects exactly 0 parameters, 1 given in %s on line 82 +NULL -- Iteration 23 -- -bool(false) + +Warning: session_unset() expects exactly 0 parameters, 1 given in %s on line 82 +NULL -- Iteration 24 -- -bool(false) -Done +Warning: session_unset() expects exactly 0 parameters, 1 given in %s on line 82 +NULL +Done diff --git a/ext/session/tests/session_unset_variation1.phpt b/ext/session/tests/session_unset_variation1.phpt index 17ab283a1b5..5c1fc2c701f 100644 --- a/ext/session/tests/session_unset_variation1.phpt +++ b/ext/session/tests/session_unset_variation1.phpt @@ -32,7 +32,7 @@ ob_end_flush(); *** Testing session_unset() : variation *** bool(false) bool(true) -NULL +bool(true) array(1) { ["foo"]=> string(12) "Hello World!" diff --git a/ext/session/tests/session_write_close_basic.phpt b/ext/session/tests/session_write_close_basic.phpt index 0841afed97e..5b32f5c2662 100644 --- a/ext/session/tests/session_write_close_basic.phpt +++ b/ext/session/tests/session_write_close_basic.phpt @@ -32,7 +32,7 @@ ob_end_flush(); bool(true) array(0) { } -NULL +bool(true) array(0) { } bool(true) diff --git a/ext/session/tests/session_write_close_error.phpt b/ext/session/tests/session_write_close_error.phpt index cbdb55f26c5..102ac413822 100644 --- a/ext/session/tests/session_write_close_error.phpt +++ b/ext/session/tests/session_write_close_error.phpt @@ -96,75 +96,122 @@ ob_end_flush(); *** Testing session_write_close() : error functionality *** -- Iteration 1 -- + +Warning: session_write_close() expects exactly 0 parameters, 1 given in %s on line 82 NULL -- Iteration 2 -- + +Warning: session_write_close() expects exactly 0 parameters, 1 given in %s on line 82 NULL -- Iteration 3 -- + +Warning: session_write_close() expects exactly 0 parameters, 1 given in %s on line 82 NULL -- Iteration 4 -- + +Warning: session_write_close() expects exactly 0 parameters, 1 given in %s on line 82 NULL -- Iteration 5 -- + +Warning: session_write_close() expects exactly 0 parameters, 1 given in %s on line 82 NULL -- Iteration 6 -- + +Warning: session_write_close() expects exactly 0 parameters, 1 given in %s on line 82 NULL -- Iteration 7 -- + +Warning: session_write_close() expects exactly 0 parameters, 1 given in %s on line 82 NULL -- Iteration 8 -- + +Warning: session_write_close() expects exactly 0 parameters, 1 given in %s on line 82 NULL -- Iteration 9 -- + +Warning: session_write_close() expects exactly 0 parameters, 1 given in %s on line 82 NULL -- Iteration 10 -- + +Warning: session_write_close() expects exactly 0 parameters, 1 given in %s on line 82 NULL -- Iteration 11 -- + +Warning: session_write_close() expects exactly 0 parameters, 1 given in %s on line 82 NULL -- Iteration 12 -- + +Warning: session_write_close() expects exactly 0 parameters, 1 given in %s on line 82 NULL -- Iteration 13 -- + +Warning: session_write_close() expects exactly 0 parameters, 1 given in %s on line 82 NULL -- Iteration 14 -- + +Warning: session_write_close() expects exactly 0 parameters, 1 given in %s on line 82 NULL -- Iteration 15 -- + +Warning: session_write_close() expects exactly 0 parameters, 1 given in %s on line 82 NULL -- Iteration 16 -- + +Warning: session_write_close() expects exactly 0 parameters, 1 given in %s on line 82 NULL -- Iteration 17 -- + +Warning: session_write_close() expects exactly 0 parameters, 1 given in %s on line 82 NULL -- Iteration 18 -- + +Warning: session_write_close() expects exactly 0 parameters, 1 given in %s on line 82 NULL -- Iteration 19 -- + +Warning: session_write_close() expects exactly 0 parameters, 1 given in %s on line 82 NULL -- Iteration 20 -- + +Warning: session_write_close() expects exactly 0 parameters, 1 given in %s on line 82 NULL -- Iteration 21 -- + +Warning: session_write_close() expects exactly 0 parameters, 1 given in %s on line 82 NULL -- Iteration 22 -- + +Warning: session_write_close() expects exactly 0 parameters, 1 given in %s on line 82 NULL -- Iteration 23 -- + +Warning: session_write_close() expects exactly 0 parameters, 1 given in %s on line 82 NULL -- Iteration 24 -- + +Warning: session_write_close() expects exactly 0 parameters, 1 given in %s on line 82 NULL Done - diff --git a/ext/session/tests/session_write_close_variation1.phpt b/ext/session/tests/session_write_close_variation1.phpt index 595796dbe76..53452b45b94 100644 --- a/ext/session/tests/session_write_close_variation1.phpt +++ b/ext/session/tests/session_write_close_variation1.phpt @@ -30,12 +30,11 @@ ob_end_flush(); --EXPECTF-- *** Testing session_write_close() : variation *** bool(true) -NULL -NULL -NULL -NULL -NULL +bool(true) +bool(false) +bool(false) +bool(false) +bool(false) bool(true) bool(true) Done - diff --git a/ext/session/tests/session_write_close_variation2.phpt b/ext/session/tests/session_write_close_variation2.phpt index 40871c5cd03..ac4f843caed 100644 --- a/ext/session/tests/session_write_close_variation2.phpt +++ b/ext/session/tests/session_write_close_variation2.phpt @@ -38,22 +38,21 @@ ob_end_flush(); bool(true) array(0) { } -NULL +bool(true) array(0) { } bool(true) array(0) { } -NULL +bool(true) array(0) { } bool(true) array(0) { } -NULL +bool(true) array(0) { } bool(true) bool(true) Done - diff --git a/ext/session/tests/session_write_close_variation3.phpt b/ext/session/tests/session_write_close_variation3.phpt index 0f8061662c3..249b5730dfd 100644 --- a/ext/session/tests/session_write_close_variation3.phpt +++ b/ext/session/tests/session_write_close_variation3.phpt @@ -30,7 +30,7 @@ ob_end_flush(); *** Testing session_write_close() : variation *** array(0) { } -NULL +bool(true) array(0) { } bool(true) diff --git a/ext/session/tests/session_write_close_variation4.phpt b/ext/session/tests/session_write_close_variation4.phpt index 9076dcf4a49..f1a7cb59d91 100644 --- a/ext/session/tests/session_write_close_variation4.phpt +++ b/ext/session/tests/session_write_close_variation4.phpt @@ -41,15 +41,15 @@ ob_end_flush(); string(0) "" bool(true) string(4) "test" -NULL +bool(true) string(4) "test" bool(true) string(4) "test" -NULL +bool(true) string(4) "test" bool(true) string(4) "test" -NULL +bool(true) string(4) "test" bool(true) bool(true)