1
0
Fork 0
mirror of https://we.phorge.it/source/phorge.git synced 2024-11-09 16:32:39 +01:00

Fix PHP 8.1 "file_exists(null)" exception rendering AphrontStackTraceView

Summary:
Passing null to `file_exists()` is deprecated behavior since PHP 8.1.
The already existing `if ($file)` check in `AphrontStackTraceView` implies that `$file` can indeed be empty.
Thus add another such check higher up in that class to avoid deprecation warnings when rendering stacktraces.

```
ERROR 8192: file_exists(): Passing null to parameter #1 ($filename) of type string is deprecated at [/var/www/html/phorge/arcanist/src/filesystem/Filesystem.php:1068];
  #0 file_exists(NULL) called at [<arcanist>/src/filesystem/Filesystem.php:1068];
  #1 Filesystem::pathExists(NULL) called at [<arcanist>/src/filesystem/Filesystem.php:1180];
  #2 Filesystem::assertExists(NULL) called at [<arcanist>/src/filesystem/Filesystem.php:1020];
  #3 Filesystem::isDescendant(NULL, string) called at [<phorge>/src/view/widget/AphrontStackTraceView.php:33];
```

Closes T15881

Test Plan: Intentionally inject an `Array to string conversion bug` in `PhabricatorEmailPreferencesSettingsPanel` (see T15881). Then visit `/settings/panel/emailpreferences/`. See the same stacktrace before and after applying this change, but see only a single line of output in DarkConsole / Error Log after applying this patch and not anymore numerous `Passing null to parameter #1 ($filename) of type string is deprecated` errors in DarkConsole / Error Log.

Reviewers: O1 Blessed Committers, speck

Reviewed By: O1 Blessed Committers, speck

Subscribers: speck, tobiaswiese, valerio.bozzolan, Matthew, Cigaryno

Maniphest Tasks: T15881

Differential Revision: https://we.phorge.it/D25728
This commit is contained in:
Andre Klapper 2024-07-10 00:22:57 +02:00
parent c4246cf871
commit 59428f64ca

View file

@ -27,13 +27,15 @@ final class AphrontStackTraceView extends AphrontView {
foreach ($trace as $part) {
$lib = null;
$file = idx($part, 'file');
$relative = $file;
foreach ($libraries as $library) {
$root = phutil_get_library_root($library);
if (Filesystem::isDescendant($file, $root)) {
$lib = $library;
$relative = Filesystem::readablePath($file, $root);
break;
if ($file !== null && $file !== '') {
$relative = $file;
foreach ($libraries as $library) {
$root = phutil_get_library_root($library);
if (Filesystem::isDescendant($file, $root)) {
$lib = $library;
$relative = Filesystem::readablePath($file, $root);
break;
}
}
}