From 856385709d65a209a70c39f32b8b1fdb9d797376 Mon Sep 17 00:00:00 2001 From: David Grudl Date: Wed, 8 Apr 2020 14:14:10 +0200 Subject: [PATCH] Helpers::guessClassFile() fixed --- src/Tracy/Helpers.php | 8 +++---- tests/Tracy/Helpers.guessClassFile().phpt | 26 +++++++++++++++++++++++ tests/Tracy/fixtures/guess-class.php | 9 ++++++++ 3 files changed, 39 insertions(+), 4 deletions(-) create mode 100644 tests/Tracy/Helpers.guessClassFile().phpt create mode 100644 tests/Tracy/fixtures/guess-class.php diff --git a/src/Tracy/Helpers.php b/src/Tracy/Helpers.php index a61752751..f367e9563 100644 --- a/src/Tracy/Helpers.php +++ b/src/Tracy/Helpers.php @@ -239,17 +239,17 @@ public static function improveError(string $message, array $context = []): strin /** @internal */ public static function guessClassFile(string $class): ?string { - $segments = explode(DIRECTORY_SEPARATOR, $class); + $segments = explode('\\', $class); $res = null; $max = 0; foreach (get_declared_classes() as $class) { - $parts = explode(DIRECTORY_SEPARATOR, $class); + $parts = explode('\\', $class); foreach ($parts as $i => $part) { - if ($part !== $segments[$i] ?? null) { + if ($part !== ($segments[$i] ?? null)) { break; } } - if ($i > $max && ($file = (new \ReflectionClass($class))->getFileName())) { + if ($i > $max && $i < count($segments) && ($file = (new \ReflectionClass($class))->getFileName())) { $max = $i; $res = array_merge(array_slice(explode(DIRECTORY_SEPARATOR, $file), 0, $i - count($parts)), array_slice($segments, $i)); $res = implode(DIRECTORY_SEPARATOR, $res) . '.php'; diff --git a/tests/Tracy/Helpers.guessClassFile().phpt b/tests/Tracy/Helpers.guessClassFile().phpt new file mode 100644 index 000000000..67d6424d0 --- /dev/null +++ b/tests/Tracy/Helpers.guessClassFile().phpt @@ -0,0 +1,26 @@ +