Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions NEWS
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,10 @@ PHP NEWS
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
?? ??? ????, PHP 8.5.0alpha1

- CLI:
. Extended --ini to print INI settings changed from the builtin default.
(timwolla)

- COM:
. Fixed property access of PHP objects wrapped in variant. (cmb)
. Fixed method calls for PHP objects wrapped in variant. (cmb)
Expand Down
1 change: 1 addition & 0 deletions UPGRADING
Original file line number Diff line number Diff line change
Expand Up @@ -107,6 +107,7 @@ PHP 8.5 UPGRADE NOTES
- CLI:
. Trying to set a process title that is too long with cli_set_process_title()
will now fail instead of silently truncating the given title.
. --ini will now print INI settings changed from the builtin default.

========================================
4. Deprecated Functionality
Expand Down
22 changes: 22 additions & 0 deletions Zend/tests/oss-fuzz-391975641.phpt
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
--TEST--
OSS-Fuzz #391975641: Segfault when creating reference from backing value
--FILE--
<?php

class C {
public $prop {
get => $this->prop;
set {
$this->prop = &$value;
$value = &$this->prop;
}
}
}

$c = new C;
$c->prop = 1;
var_dump($c->prop);

?>
--EXPECT--
int(1)
2 changes: 1 addition & 1 deletion Zend/zend_execute.c
Original file line number Diff line number Diff line change
Expand Up @@ -3492,7 +3492,7 @@ static zend_always_inline void zend_assign_to_property_reference(zval *container

variable_ptr = zend_wrong_assign_to_variable_reference(
variable_ptr, value_ptr, &garbage OPLINE_CC EXECUTE_DATA_CC);
} else if (prop_info) {
} else if (prop_info && ZEND_TYPE_IS_SET(prop_info->type)) {
variable_ptr = zend_assign_to_typed_property_reference(prop_info, variable_ptr, value_ptr, &garbage EXECUTE_DATA_CC);
} else {
zend_assign_to_variable_reference(variable_ptr, value_ptr, &garbage);
Expand Down
2 changes: 1 addition & 1 deletion Zend/zend_hrtime.h
Original file line number Diff line number Diff line change
Expand Up @@ -83,7 +83,7 @@ void zend_startup_hrtime(void);
static zend_always_inline zend_hrtime_t zend_hrtime(void)
{
#if ZEND_HRTIME_PLATFORM_WINDOWS
LARGE_INTEGER lt = {0};
LARGE_INTEGER lt = {{0}};
QueryPerformanceCounter(&lt);
return (zend_hrtime_t)((zend_hrtime_t)lt.QuadPart * zend_hrtime_timer_scale);
#elif ZEND_HRTIME_PLATFORM_APPLE_GETTIME_NSEC
Expand Down
1 change: 1 addition & 0 deletions Zend/zend_ini.c
Original file line number Diff line number Diff line change
Expand Up @@ -225,6 +225,7 @@ ZEND_API zend_result zend_register_ini_entries_ex(const zend_ini_entry_def *ini_

while (ini_entry->name) {
p = pemalloc(sizeof(zend_ini_entry), 1);
p->def = ini_entry;
p->name = zend_string_init_interned(ini_entry->name, ini_entry->name_length, 1);
p->on_modify = ini_entry->on_modify;
p->mh_arg1 = ini_entry->mh_arg1;
Expand Down
1 change: 1 addition & 0 deletions Zend/zend_ini.h
Original file line number Diff line number Diff line change
Expand Up @@ -60,6 +60,7 @@ struct _zend_ini_entry {
uint8_t orig_modifiable;
uint8_t modified;

const zend_ini_entry_def *def;
};

BEGIN_EXTERN_C()
Expand Down
2 changes: 1 addition & 1 deletion ext/opcache/zend_file_cache.c
Original file line number Diff line number Diff line change
Expand Up @@ -75,7 +75,7 @@
# define LOCK_UN 2
static int zend_file_cache_flock(int fd, int op)
{
OVERLAPPED offset = {0,0,0,0,NULL};
OVERLAPPED offset = {0, 0, {{0}}, NULL};
if (op == LOCK_EX) {
if (LockFileEx((HANDLE)_get_osfhandle(fd),
LOCKFILE_EXCLUSIVE_LOCK, 0, 1, 0, &offset) == TRUE) {
Expand Down
2 changes: 1 addition & 1 deletion ext/openssl/xp_ssl.c
Original file line number Diff line number Diff line change
Expand Up @@ -758,7 +758,7 @@ static int php_openssl_win_cert_verify_callback(X509_STORE_CTX *x509_store_ctx,
}

{ /* Then verify it against a policy */
SSL_EXTRA_CERT_CHAIN_POLICY_PARA ssl_policy_params = {sizeof(SSL_EXTRA_CERT_CHAIN_POLICY_PARA)};
SSL_EXTRA_CERT_CHAIN_POLICY_PARA ssl_policy_params = {{sizeof(SSL_EXTRA_CERT_CHAIN_POLICY_PARA)}};
CERT_CHAIN_POLICY_PARA chain_policy_params = {sizeof(CERT_CHAIN_POLICY_PARA)};
CERT_CHAIN_POLICY_STATUS chain_policy_status = {sizeof(CERT_CHAIN_POLICY_STATUS)};
BOOL verify_result;
Expand Down
2 changes: 1 addition & 1 deletion ext/standard/basic_functions.c
Original file line number Diff line number Diff line change
Expand Up @@ -807,7 +807,7 @@ PHP_FUNCTION(putenv)
valw = php_win32_cp_any_to_w(value);
}
/* valw may be NULL, but the failed conversion still needs to be checked. */
if (!keyw || !valw && value) {
if (!keyw || (!valw && value)) {
tsrm_env_unlock();
free(pe.putenv_string);
zend_string_release(pe.key);
Expand Down
3 changes: 1 addition & 2 deletions ext/standard/flock_compat.c
Original file line number Diff line number Diff line change
Expand Up @@ -104,8 +104,7 @@ PHPAPI int php_flock(int fd, int operation)
{
HANDLE hdl = (HANDLE) _get_osfhandle(fd);
DWORD low = 0xFFFFFFFF, high = 0xFFFFFFFF;
OVERLAPPED offset =
{0, 0, 0, 0, NULL};
OVERLAPPED offset = {0, 0, {{0}}, NULL};
DWORD err;

if (INVALID_HANDLE_VALUE == hdl) {
Expand Down
2 changes: 1 addition & 1 deletion main/fopen_wrappers.c
Original file line number Diff line number Diff line change
Expand Up @@ -531,7 +531,7 @@ PHPAPI zend_string *php_resolve_path(const char *filename, size_t filename_lengt
IS_ABSOLUTE_PATH doesn't care about this path form till now. It
might be a big thing to extend, thus just a local handling for
now. */
filename_length >=2 && IS_SLASH(filename[0]) && !IS_SLASH(filename[1]) ||
(filename_length >=2 && IS_SLASH(filename[0]) && !IS_SLASH(filename[1])) ||
#endif
!path ||
!*path) {
Expand Down
37 changes: 35 additions & 2 deletions sapi/cli/php_cli.c
Original file line number Diff line number Diff line change
Expand Up @@ -588,6 +588,14 @@ BOOL WINAPI php_cli_win32_ctrl_handler(DWORD sig)
#endif
/*}}}*/

static int zend_ini_entry_cmp(Bucket *a, Bucket *b)
{
zend_ini_entry *A = Z_PTR(a->val);
zend_ini_entry *B = Z_PTR(b->val);

return zend_binary_strcasecmp(ZSTR_VAL(A->name), ZSTR_LEN(A->name), ZSTR_VAL(B->name), ZSTR_LEN(B->name));
}

static int do_cli(int argc, char **argv) /* {{{ */
{
int c;
Expand Down Expand Up @@ -840,9 +848,9 @@ static int do_cli(int argc, char **argv) /* {{{ */
is essential to mitigate buggy console info. */
interactive = php_win32_console_is_own() &&
!(script_file ||
argc > php_optind && context.mode != PHP_CLI_MODE_CLI_DIRECT &&
(argc > php_optind && context.mode != PHP_CLI_MODE_CLI_DIRECT &&
context.mode != PHP_CLI_MODE_PROCESS_STDIN &&
strcmp(argv[php_optind-1],"--")
strcmp(argv[php_optind-1],"--"))
);
}
#endif
Expand Down Expand Up @@ -1096,6 +1104,31 @@ static int do_cli(int argc, char **argv) /* {{{ */
zend_printf("Loaded Configuration File: %s\n", php_ini_opened_path ? php_ini_opened_path : "(none)");
zend_printf("Scan for additional .ini files in: %s\n", php_ini_scanned_path ? php_ini_scanned_path : "(none)");
zend_printf("Additional .ini files parsed: %s\n", php_ini_scanned_files ? php_ini_scanned_files : "(none)");
zend_printf("\n");
zend_printf("Non-default INI settings:\n");
zend_ini_entry *ini_entry;
HashTable *sorted = zend_array_dup(EG(ini_directives));
zend_array_sort(sorted, zend_ini_entry_cmp, 1);
ZEND_HASH_PACKED_FOREACH_PTR(sorted, ini_entry) {
if (ini_entry->value == NULL && ini_entry->def->value == NULL) {
continue;
}
if (ini_entry->value != NULL && ini_entry->def->value != NULL && zend_string_equals_cstr(ini_entry->value, ini_entry->def->value, ini_entry->def->value_length)) {
continue;
}

zend_printf(
"%s: %s%s%s -> %s%s%s\n",
ZSTR_VAL(ini_entry->name),
ini_entry->def->value ? "\"" : "",
ini_entry->def->value ? ini_entry->def->value : "(none)",
ini_entry->def->value ? "\"" : "",
ini_entry->value ? "\"" : "",
ini_entry->value ? ZSTR_VAL(ini_entry->value) : "(none)",
ini_entry->value ? "\"" : ""
);
} ZEND_HASH_FOREACH_END();
zend_array_destroy(sorted);
break;
}
}
Expand Down
4 changes: 2 additions & 2 deletions win32/fnmatch.c
Original file line number Diff line number Diff line change
Expand Up @@ -137,8 +137,8 @@ PHPAPI int fnmatch(const char *pattern, const char *string, int flags)
tolower((unsigned char)*string)))
;
else if ((flags & FNM_PREFIX_DIRS) && *string == EOS &&
(c == '/' && string != stringstart ||
string == stringstart+1 && *stringstart == '/') )
((c == '/' && string != stringstart) ||
(string == stringstart+1 && *stringstart == '/')))
return (0);
else
return (FNM_NOMATCH);
Expand Down
2 changes: 1 addition & 1 deletion win32/readdir.c
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,7 @@ DIR *opendir(const char *dir)
wcscpy(filespecw, resolvedw);
index = resolvedw_len - 1;
}
if (index >= 0 && filespecw[index] == L'/' || index == 0 && filespecw[index] == L'\\')
if ((index >= 0 && filespecw[index] == L'/') || (index == 0 && filespecw[index] == L'\\'))
filespecw[index] = L'\0';
wcscat(filespecw, L"\\*");

Expand Down
2 changes: 1 addition & 1 deletion win32/winutil.c
Original file line number Diff line number Diff line change
Expand Up @@ -459,7 +459,7 @@ static zend_always_inline BOOL is_compatible(HMODULE handle, BOOL is_smaller, ch
This check is to be extended as new VS versions come out. */
DWORD core_minor = (DWORD)(PHP_LINKER_MINOR/10);
DWORD comp_minor = (DWORD)(minor/10);
if (14 == major && (is_smaller ? core_minor < comp_minor : core_minor > comp_minor) || PHP_LINKER_MAJOR != major)
if ((14 == major && (is_smaller ? core_minor < comp_minor : core_minor > comp_minor)) || PHP_LINKER_MAJOR != major)
#else
if (PHP_LINKER_MAJOR != major)
#endif
Expand Down