mirror of
https://github.com/php/php-src.git
synced 2024-11-27 11:53:33 +08:00
Fix bug #78094: File Search Problem Excessive Time
Instead of checking GetBinaryType() for each file, we do a much cheaper pre-check whether the filename extension matches .exe or .com, and call GetBinaryType() only in this case. For BC we also report .bat and .cmd files as executables again. The patch has been provided by @weltling.
This commit is contained in:
parent
c358c280df
commit
f5b44c7e8a
@ -925,9 +925,19 @@ static int php_win32_ioutil_fstat_int(HANDLE h, php_win32_ioutil_stat_t *buf, co
|
||||
buf->st_mode = 0;
|
||||
|
||||
if (!is_dir) {
|
||||
DWORD type;
|
||||
if (GetBinaryTypeW(pathw, &type)) {
|
||||
if (pathw_len >= 4 &&
|
||||
pathw[pathw_len-4] == L'.') {
|
||||
if (_wcsnicmp(pathw+pathw_len-3, L"exe", 3) == 0 ||
|
||||
_wcsnicmp(pathw+pathw_len-3, L"com", 3) == 0) {
|
||||
DWORD type;
|
||||
if (GetBinaryTypeW(pathw, &type)) {
|
||||
buf->st_mode |= (S_IEXEC|(S_IEXEC>>3)|(S_IEXEC>>6));
|
||||
}
|
||||
/* The below is actually incorrect, but keep for BC. */
|
||||
} else if (_wcsnicmp(pathw+pathw_len-3, L"bat", 3) == 0 ||
|
||||
_wcsnicmp(pathw+pathw_len-3, L"cmd", 3) == 0) {
|
||||
buf->st_mode |= (S_IEXEC|(S_IEXEC>>3)|(S_IEXEC>>6));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user