diff --git a/src/Dibi/Event.php b/src/Dibi/Event.php index 0533a3e4..3a41a838 100644 --- a/src/Dibi/Event.php +++ b/src/Dibi/Event.php @@ -63,7 +63,11 @@ public function __construct(Connection $connection, int $type, ?string $sql = nu $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']) && !str_starts_with($row['file'], $dibiDir)) { + if ( + isset($row['file']) + && !str_starts_with($row['file'], $dibiDir) + && !str_ends_with($row['file'], ": eval()'d code") + ) { $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..573e2b39 --- /dev/null +++ b/tests/dibi/Event.source.phpt @@ -0,0 +1,24 @@ +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]);