From 7fa05f381b23fdc59af98caeb03b1ae8ed1e03ed Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marek=20=C5=A0t=C3=ADpek?= Date: Fri, 18 Nov 2022 04:32:56 +0100 Subject: [PATCH] Event: detecting source without filesystem check (#428) Co-authored-by: Marek Stipek --- src/Dibi/Event.php | 6 +++++- tests/dibi/Event.source.phpt | 21 +++++++++++++++++++++ 2 files changed, 26 insertions(+), 1 deletion(-) create mode 100644 tests/dibi/Event.source.phpt diff --git a/src/Dibi/Event.php b/src/Dibi/Event.php index 5b883d7a..0d0c7af4 100644 --- a/src/Dibi/Event.php +++ b/src/Dibi/Event.php @@ -70,7 +70,11 @@ class Event $dibiDir = dirname((new \ReflectionClass('dibi'))->getFileName()) . DIRECTORY_SEPARATOR; foreach (debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS) as $row) { - if (isset($row['file']) && is_file($row['file']) && strpos($row['file'], $dibiDir) !== 0) { + if ( + isset($row['file']) + && preg_match('~\.(php.?|phtml)$~', $row['file']) + && substr($row['file'], 0, strlen($dibiDir)) !== $dibiDir + ) { $this->source = [$row['file'], (int) $row['line']]; break; } diff --git a/tests/dibi/Event.source.phpt b/tests/dibi/Event.source.phpt new file mode 100644 index 00000000..484eaaf0 --- /dev/null +++ b/tests/dibi/Event.source.phpt @@ -0,0 +1,21 @@ +source); + +eval('$event = new Dibi\Event($conn, Dibi\Event::CONNECT);'); +Assert::same([__FILE__, __LINE__ - 1], $event->source); + +array_map(function () use ($conn) { + $event = new Dibi\Event($conn, Dibi\Event::CONNECT); + Assert::same([__FILE__, __LINE__ - 1], $event->source); +}, [null]);