#
00008a86 |
| 12-Apr-2023 |
Niels Dossche <7771979+nielsdos@users.noreply.github.com> |
Remove unnecessary memory clearing in virtual_file_ex() (#10963) I checked a simple Laravel CRUD application's home page under Callgrind and found that the line: char resolved_path
Remove unnecessary memory clearing in virtual_file_ex() (#10963) I checked a simple Laravel CRUD application's home page under Callgrind and found that the line: char resolved_path[MAXPATHLEN] = {0}; took up about 0.95% of the spent instruction count. This is because when opcache revalidates the timestamps, it has to go through the function virtual_file_ex() which contains that line. That line will memset 4096 bytes on my system to all zeroes. This is bad for the data cache and for the runtime. I found that this memsetting is unnecessary in most cases, and that we can fix the one remaining case: * Lines 1020-1027 don't do anything with resolved_path, so that's okay. * Lines 1033-1098: - The !IS_ABSOLUTE_PATH branch will always result in a memcpy from path to resolved_path (+ sometimes an offset) with the total copied amount equal to path_length+1, so that includes a NUL byte. - The else branch either takes the WIN32 path or the non-WIN32 path. ° WIN32: There's a copy from path+2 with length path_length-1. Note that we chop off the first 2 bytes, so this also includes the NUL byte. ° Non-WIN32: Copies path_length+1 bytes, so that includes a NUL byte. At this point we know that resolved_path ends in a NUL byte. Going further in the code: * Lines 1100-1106 don't write to resolved_path, so no NUL byte is removed. * Lines 1108-1136: - The IS_UNC_PATH branch: ° Lines 1111-1112 don't overwrite the NUL byte, because we know the path length is at least 2 due to the IS_UNC_PATH check. ° Both while loops uppercase the path until a slash is found. If a NUL byte was found then it jumps to verify. Therefore, no NUL byte can be overwritten. Furthermore, Lines 1121 and 1129 cannot overwrite a NUL byte because the check at lines 1115 and 1123 would've jumped to verify when a NUL byte would be encountered. Therefore, the IS_UNC_PATH branch cannot overwrite a NUL byte, so the NUL byte we know we already got stays in place. - The else branch: ° We know the path length is at least 2 due to IS_ABSOLUTE_PATH. That means the earliest NUL byte can be at index 2, which can be overwritten on line 1133. We fix this by adding one byte write if the length is 2. All uses of resolved_path in lines 1139-1141 have a NUL byte at the end now. Lines 1154-1164 do a bunch of post-processing but line 1164 will make sure resolved_path still ends in a NUL byte. So therefore I propose to remove the huge memset, and add a single byte write in that one else branch I mentioned earlier. Looking at Callgrind, the instruction count before this patch for 200 requests is 14,264,569,942; and after the patch it's 14,129,358,195 (averaged over a handful of runs).
show more ...
|
Revision tags: php-8.2.0RC1, php-8.1.10, php-8.0.23, php-8.0.23RC1, php-8.1.10RC1, php-8.2.0beta3 |
|
#
a1f5c8a5 |
| 16-Aug-2022 |
Christoph M. Becker |
Fix GH-9227: Trailing dots and spaces in filenames are ignored Given that Windows ignores trailing dots and spaces in filenames, we catch that ourselves to avoid confusion with the respe
Fix GH-9227: Trailing dots and spaces in filenames are ignored Given that Windows ignores trailing dots and spaces in filenames, we catch that ourselves to avoid confusion with the respective filenames without these characters. Closes GH-9229.
show more ...
|
Revision tags: php-8.2.0beta2, php-8.1.9, php-8.0.22, php-8.1.9RC1, php-8.2.0beta1, php-8.0.22RC1, php-8.0.21, php-8.1.8, php-8.2.0alpha3, php-8.1.8RC1, php-8.2.0alpha2, php-8.0.21RC1, php-8.0.20, php-8.1.7, php-8.2.0alpha1, php-7.4.30, php-8.1.7RC1, php-8.0.20RC1 |
|
#
2ecd46f4 |
| 22-May-2022 |
George Peter Banyard |
Initialise zend_stat_t to fix MSAN build |
#
926407f2 |
| 13-May-2022 |
George Peter Banyard |
Fix some MSAN complaints under Clang (#8553) |
Revision tags: php-8.1.6, php-8.0.19, php-8.1.6RC1, php-8.0.19RC1, php-8.0.18, php-8.1.5, php-7.4.29, php-8.1.5RC1, php-8.0.18RC1, php-8.1.4, php-8.0.17, php-8.1.4RC1, php-8.0.17RC1, php-8.1.3, php-8.0.16, php-7.4.28, php-8.1.3RC1, php-8.0.16RC1, php-8.1.2, php-8.0.15, php-8.1.2RC1, php-8.0.15RC1, php-8.0.14, php-8.1.1, php-7.4.27, php-8.1.1RC1, php-8.0.14RC1, php-7.4.27RC1, php-8.1.0, php-8.0.13, php-7.4.26, php-7.3.33, php-8.1.0RC6, php-7.4.26RC1, php-8.0.13RC1, php-8.1.0RC5, php-7.3.32, php-7.4.25, php-8.0.12, php-8.1.0RC4, php-8.0.12RC1, php-7.4.25RC1, php-8.1.0RC3, php-8.0.11, php-7.4.24, php-7.3.31, php-8.1.0RC2, php-7.4.24RC1, php-8.0.11RC1, php-8.1.0RC1, php-7.4.23, php-8.0.10, php-7.3.30, php-8.1.0beta3, php-8.0.10RC1, php-7.4.23RC1, php-8.1.0beta2, php-8.0.9, php-7.4.22, php-8.1.0beta1, php-7.4.22RC1, php-8.0.9RC1, php-8.1.0alpha3, php-7.4.21, php-7.3.29, php-8.0.8, php-8.1.0alpha2, php-7.4.21RC1, php-8.0.8RC1, php-8.1.0alpha1, php-8.0.7, php-7.4.20 |
|
#
7a766401 |
| 25-May-2021 |
Nikita Popov |
Merge branch 'PHP-8.0' * PHP-8.0: Fix bug #81068: Fix possible use-after-free in realpath_cache_clean()
|
#
0fb37144 |
| 25-May-2021 |
Nikita Popov |
Merge branch 'PHP-7.4' into PHP-8.0 * PHP-7.4: Fix bug #81068: Fix possible use-after-free in realpath_cache_clean()
|
#
99a20856 |
| 21-May-2021 |
Dimitry Andric |
Fix bug #81068: Fix possible use-after-free in realpath_cache_clean() If ZTS is enabled, this can cause cwd_globals_ctor() to be called multiple times, each with a freshly allocated virt
Fix bug #81068: Fix possible use-after-free in realpath_cache_clean() If ZTS is enabled, this can cause cwd_globals_ctor() to be called multiple times, each with a freshly allocated virtual_cwd_globals instance. At shutdown time however, cwd_globals_dtor() will call realpath_cache_clean(), which then possibly cleans up the same realpath_cache instance more than once. Using AddressSanitzer, this shows up as a heap use-after-free. To avoid this, add a helper function to do the actual work on one instance of a realpath_cache, and call it both from cwd_globals_dtor() and realpath_cache_clean(). The former uses the virtual_cwd_globals parameter passed in via the destructor, the latter uses the CWDG() macro.
show more ...
|
Revision tags: php-8.0.7RC1, php-7.4.20RC1 |
|
#
aca6aefd |
| 14-May-2021 |
George Peter Banyard |
Remove 'register' type qualifier (#6980) The compiler should be smart enough to optimize this on its own |
#
01b3fc03 |
| 06-May-2021 |
KsaR |
Update http->https in license (#6945) 1. Update: http://www.php.net/license/3_01.txt to https, as there is anyway server header "Location:" to https. 2. Update few license 3.0 to 3.01 as
Update http->https in license (#6945) 1. Update: http://www.php.net/license/3_01.txt to https, as there is anyway server header "Location:" to https. 2. Update few license 3.0 to 3.01 as 3.0 states "php 5.1.1, 4.1.1, and earlier". 3. In some license comments is "at through the world-wide-web" while most is without "at", so deleted. 4. fixed indentation in some files before |
show more ...
|
Revision tags: php-8.0.6, php-7.4.19, php-7.4.18, php-7.3.28, php-8.0.5 |
|
#
c8a966a9 |
| 19-Apr-2021 |
Christoph M. Becker |
Merge branch 'PHP-8.0' * PHP-8.0: Fix #80960: opendir() warning wrong info when failed on Windows
|
#
cb262cd9 |
| 19-Apr-2021 |
Christoph M. Becker |
Merge branch 'PHP-7.4' into PHP-8.0 * PHP-7.4: Fix #80960: opendir() warning wrong info when failed on Windows
|
#
ea3c992b |
| 19-Apr-2021 |
Christoph M. Becker |
Fix #80960: opendir() warning wrong info when failed on Windows Firstly, we must not forget to set appropriate error codes for "manual" checks in `virtual_file_ex()`. Secondly,
Fix #80960: opendir() warning wrong info when failed on Windows Firstly, we must not forget to set appropriate error codes for "manual" checks in `virtual_file_ex()`. Secondly, we must not call `php_error_docref2()` for warnings regarding unary functions; thus, we introduce `php_win32_docref1_from_error()`. Closes GH-6872.
show more ...
|
Revision tags: php-8.0.5RC1, php-7.4.18RC1 |
|
#
462da6e0 |
| 31-Mar-2021 |
Josh Soref |
Fix spelling and grammar mistakes This PR corrects misspellings identified by the check-spelling action. The misspellings have been reported at jsoref@b6ba3e2#commitcomment-48946465
Fix spelling and grammar mistakes This PR corrects misspellings identified by the check-spelling action. The misspellings have been reported at jsoref@b6ba3e2#commitcomment-48946465 The action reports that the changes in this PR would make it happy: jsoref@602417c Closes GH-6822.
show more ...
|
Revision tags: php-8.0.4RC1, php-7.4.17RC1, php-8.0.3, php-7.4.16, php-8.0.3RC1, php-7.4.16RC1, php-8.0.2, php-7.4.15, php-7.3.27, php-8.0.2RC1, php-7.4.15RC2, php-7.4.15RC1, php-8.0.1, php-7.4.14, php-7.3.26, php-7.4.14RC1, php-8.0.1RC1, php-7.3.26RC1, php-8.0.0, php-7.3.25, php-7.4.13, php-8.0.0RC5, php-7.4.13RC1, php-8.0.0RC4, php-7.3.25RC1, php-7.4.12, php-8.0.0RC3, php-7.3.24, php-8.0.0RC2, php-7.4.12RC1, php-7.3.24RC1, php-7.2.34, php-8.0.0rc1 |
|
#
5caaf40b |
| 29-Sep-2020 |
George Peter Banyard |
Introduce pseudo-keyword ZEND_FALLTHROUGH And use it instead of comments |
#
26bd8579 |
| 26-Oct-2020 |
Nikita Popov |
Merge branch 'PHP-7.4' into PHP-8.0 * PHP-7.4: Declare may_retry_reparse_point on windows only
|
#
31aca855 |
| 26-Oct-2020 |
Nikita Popov |
Merge branch 'PHP-7.3' into PHP-7.4 * PHP-7.3: Declare may_retry_reparse_point on windows only
|
#
824cbc27 |
| 26-Oct-2020 |
Nikita Popov |
Declare may_retry_reparse_point on windows only |
#
0abcb9fb |
| 26-Oct-2020 |
Christoph M. Becker |
Merge branch 'PHP-7.4' into PHP-8.0 * PHP-7.4: Fix #80258: Windows Deduplication Enabled, randon permission errors
|
#
ac2e9587 |
| 26-Oct-2020 |
Christoph M. Becker |
Merge branch 'PHP-7.3' into PHP-7.4 * PHP-7.3: Fix #80258: Windows Deduplication Enabled, randon permission errors
|
#
848e24f2 |
| 19-Oct-2020 |
Christoph M. Becker |
Fix #80258: Windows Deduplication Enabled, randon permission errors A recent bug fix regarding symlinks claimed: > After resolving reparse points, the path still may be a reparse
Fix #80258: Windows Deduplication Enabled, randon permission errors A recent bug fix regarding symlinks claimed: > After resolving reparse points, the path still may be a reparse > point; in that case we have to resolve that reparse point as well. While that is basically correct, some reparse points may point to inaccessible system folders (e.g. `IO_REPARSE_TAG_DEDUP` points to "\System Volume Information"). Since we don't know details about arbitrary reparse points, and are mainly interested in nested symlinks, we take a step back, and only resolve `IO_REPARSE_TAG_SYMLINK` for now. Close GH-6354.
show more ...
|
Revision tags: php-7.4.11, php-7.3.23, php-8.0.0beta4, php-7.4.11RC1, php-7.3.23RC1, php-8.0.0beta3, php-7.4.10, php-7.3.22 |
|
#
fa8d9b11 |
| 28-Aug-2020 |
George Peter Banyard |
Improve type declarations for Zend APIs Voidification of Zend API which always succeeded Use bool argument types instead of int for boolean arguments Use bool return type for functio
Improve type declarations for Zend APIs Voidification of Zend API which always succeeded Use bool argument types instead of int for boolean arguments Use bool return type for functions which return true/false (1/0) Use zend_result return type for functions which return SUCCESS/FAILURE as they don't follow normal boolean semantics Closes GH-6002
show more ...
|
Revision tags: php-8.0.0beta2, php-7.3.22RC1, php-7.4.10RC1, php-8.0.0beta1, php-7.4.9, php-7.2.33, php-7.3.21 |
|
#
44ad2db1 |
| 28-Jul-2020 |
Christoph M. Becker |
Merge branch 'PHP-7.4' * PHP-7.4: Fix #79806: realpath() erroneously resolves link to link
|
#
e0ebe56e |
| 28-Jul-2020 |
Christoph M. Becker |
Merge branch 'PHP-7.3' into PHP-7.4 * PHP-7.3: Fix #79806: realpath() erroneously resolves link to link
|
#
c756f82c |
| 28-Jul-2020 |
Christoph M. Becker |
Fix #79806: realpath() erroneously resolves link to link After resolving reparse points, the path still may be a reparse point; in that case we have to resolve that reparse point as well. |
#
592f70bc |
| 27-Jul-2020 |
Christoph M. Becker |
Merge branch 'PHP-7.4' * PHP-7.4: Revert "Fix #79806: realpath() erroneously resolves link to link"
|