mirror of
https://github.com/php/php-src.git
synced 2026-03-24 00:02:20 +01:00
ext/session: use zend_strings for open handler
This commit is contained in:
@@ -100,6 +100,10 @@ PHP 8.6 INTERNALS UPGRADE NOTES
|
||||
- ext/session:
|
||||
. php_session_flush() now returns a bool rather than a zend_result.
|
||||
. Removed session_adapt_url().
|
||||
. PS_OPEN_ARGS is now defined as
|
||||
`void **mod_data, zend_string *save_path, zend_string *session_name`
|
||||
rather than
|
||||
`void **mod_data, const char *save_path, const char *session_name`
|
||||
|
||||
- ext/standard:
|
||||
. _php_error_log() now has a formal return type of zend_result.
|
||||
|
||||
@@ -369,19 +369,22 @@ PS_OPEN_FUNC(files)
|
||||
int argc = 0;
|
||||
size_t dirdepth = 0;
|
||||
int filemode = 0600;
|
||||
const char *used_save_path;
|
||||
|
||||
if (*save_path == '\0') {
|
||||
if (ZSTR_LEN(save_path) == 0) {
|
||||
/* if save path is an empty string, determine the temporary dir */
|
||||
save_path = php_get_temporary_directory();
|
||||
used_save_path = php_get_temporary_directory();
|
||||
|
||||
if (php_check_open_basedir(save_path)) {
|
||||
if (php_check_open_basedir(used_save_path)) {
|
||||
return FAILURE;
|
||||
}
|
||||
} else {
|
||||
used_save_path = ZSTR_VAL(save_path);
|
||||
}
|
||||
|
||||
/* split up input parameter */
|
||||
last = save_path;
|
||||
p = strchr(save_path, ';');
|
||||
last = used_save_path;
|
||||
p = strchr(used_save_path, ';');
|
||||
while (p) {
|
||||
argv[argc++] = last;
|
||||
last = ++p;
|
||||
@@ -407,14 +410,14 @@ PS_OPEN_FUNC(files)
|
||||
return FAILURE;
|
||||
}
|
||||
}
|
||||
save_path = argv[argc - 1];
|
||||
used_save_path = argv[argc - 1];
|
||||
|
||||
data = ecalloc(1, sizeof(*data));
|
||||
|
||||
data->fd = -1;
|
||||
data->dirdepth = dirdepth;
|
||||
data->filemode = filemode;
|
||||
data->basedir = zend_string_init(save_path, strlen(save_path), /* persistent */ false);
|
||||
data->basedir = zend_string_init(used_save_path, strlen(used_save_path), /* persistent */ false);
|
||||
|
||||
if (PS_GET_MOD_DATA()) {
|
||||
ps_close_files(mod_data);
|
||||
|
||||
@@ -83,12 +83,11 @@ PS_OPEN_FUNC(user)
|
||||
{
|
||||
zval args[2];
|
||||
zval retval;
|
||||
zend_result ret = FAILURE;
|
||||
|
||||
ZEND_ASSERT(!Z_ISUNDEF(PSF(open)));
|
||||
|
||||
ZVAL_STRING(&args[0], (char*)save_path);
|
||||
ZVAL_STRING(&args[1], (char*)session_name);
|
||||
ZVAL_STR(&args[0], zend_string_dup(save_path, false));
|
||||
ZVAL_STR(&args[1], zend_string_dup(session_name, false));
|
||||
|
||||
zend_try {
|
||||
ps_call_handler(&PSF(open), 2, args, &retval);
|
||||
@@ -102,7 +101,7 @@ PS_OPEN_FUNC(user)
|
||||
|
||||
PS(mod_user_implemented) = true;
|
||||
|
||||
ret = verify_bool_return_type_userland_calls(&retval);
|
||||
zend_result ret = verify_bool_return_type_userland_calls(&retval);
|
||||
zval_ptr_dtor(&retval);
|
||||
return ret;
|
||||
}
|
||||
|
||||
@@ -36,11 +36,10 @@
|
||||
|
||||
PHP_METHOD(SessionHandler, open)
|
||||
{
|
||||
char *save_path = NULL, *session_name = NULL;
|
||||
size_t save_path_len, session_name_len;
|
||||
zend_string *save_path, *session_name;
|
||||
zend_result ret;
|
||||
|
||||
if (zend_parse_parameters(ZEND_NUM_ARGS(), "ss", &save_path, &save_path_len, &session_name, &session_name_len) == FAILURE) {
|
||||
if (zend_parse_parameters(ZEND_NUM_ARGS(), "SS", &save_path, &session_name) == FAILURE) {
|
||||
RETURN_THROWS();
|
||||
}
|
||||
|
||||
|
||||
@@ -26,7 +26,7 @@
|
||||
#define PHP_SESSION_VERSION PHP_VERSION
|
||||
|
||||
/* save handler macros */
|
||||
#define PS_OPEN_ARGS void **mod_data, const char *save_path, const char *session_name
|
||||
#define PS_OPEN_ARGS void **mod_data, zend_string *save_path, zend_string *session_name
|
||||
#define PS_CLOSE_ARGS void **mod_data
|
||||
#define PS_READ_ARGS void **mod_data, zend_string *key, zend_string **val, zend_long maxlifetime
|
||||
#define PS_WRITE_ARGS void **mod_data, zend_string *key, zend_string *val, zend_long maxlifetime
|
||||
|
||||
@@ -424,7 +424,7 @@ static zend_result php_session_initialize(void)
|
||||
}
|
||||
|
||||
/* Open session handler first */
|
||||
if (PS(mod)->s_open(&PS(mod_data), ZSTR_VAL(PS(save_path)), ZSTR_VAL(PS(session_name))) == FAILURE
|
||||
if (PS(mod)->s_open(&PS(mod_data), PS(save_path), PS(session_name)) == FAILURE
|
||||
/* || PS(mod_data) == NULL */ /* FIXME: open must set valid PS(mod_data) with success */
|
||||
) {
|
||||
php_session_abort();
|
||||
@@ -2351,7 +2351,7 @@ PHP_FUNCTION(session_regenerate_id)
|
||||
zend_string_release_ex(PS(id), false);
|
||||
PS(id) = NULL;
|
||||
|
||||
if (PS(mod)->s_open(&PS(mod_data), ZSTR_VAL(PS(save_path)), ZSTR_VAL(PS(session_name))) == FAILURE) {
|
||||
if (PS(mod)->s_open(&PS(mod_data), PS(save_path), PS(session_name)) == FAILURE) {
|
||||
PS(session_status) = php_session_none;
|
||||
if (!EG(exception)) {
|
||||
zend_throw_error(NULL, "Failed to open session: %s (path: %s)", PS(mod)->s_name, ZSTR_VAL(PS(save_path)));
|
||||
|
||||
Reference in New Issue
Block a user