Skip to content

Commit

Permalink
Fix exception render of TrackableTrait with unset shortName (#401)
Browse files Browse the repository at this point in the history
  • Loading branch information
mvorisek committed Jan 27, 2024
1 parent fd049d4 commit c6da2b9
Show file tree
Hide file tree
Showing 2 changed files with 24 additions and 19 deletions.
12 changes: 6 additions & 6 deletions src/ExceptionRenderer/RendererAbstract.php
Original file line number Diff line number Diff line change
Expand Up @@ -108,7 +108,7 @@ protected function parseStackTraceFrame(array $frame): array

if ($parsed['object'] !== null) {
$parsed['object_formatted'] = TraitUtil::hasTrackableTrait($parsed['object'])
? get_object_vars($parsed['object'])['name'] ?? $parsed['object']->shortName
? get_object_vars($parsed['object'])['name'] ?? ($parsed['object']->shortName ?? '')
: str_replace("\0", ' ', $this->tryRelativizePathsInString(get_class($parsed['object'])));
}

Expand All @@ -120,12 +120,12 @@ protected function parseStackTraceFrame(array $frame): array
*/
public static function toSafeString($val, bool $allowNl = false, int $maxDepth = 2): string
{
if ($val instanceof \Closure) {
return 'closure';
} elseif (is_object($val)) {
return get_class($val) . (TraitUtil::hasTrackableTrait($val) ? ' (' . (get_object_vars($val)['name'] ?? $val->shortName) . ')' : '');
if (is_object($val)) {
return get_class($val) . (TraitUtil::hasTrackableTrait($val)
? ' (' . (get_object_vars($val)['name'] ?? ($val->shortName ?? '')) . ')'
: '');
} elseif (is_resource($val)) {
return 'resource';
return 'resource (' . get_resource_type($val) . ')';
} elseif (is_scalar($val) || $val === null) {
$out = json_encode($val, \JSON_UNESCAPED_SLASHES | \JSON_PRESERVE_ZERO_FRACTION | \JSON_UNESCAPED_UNICODE | \JSON_THROW_ON_ERROR);
$out = preg_replace('~\\\\"~', '"', preg_replace('~^"|"$~s', '\'', $out)); // use single quotes
Expand Down
31 changes: 18 additions & 13 deletions tests/ExceptionTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -44,31 +44,36 @@ public function testBasic(): void
self::assertMatchesRegularExpression('~TestIt~', $ret);
self::assertMatchesRegularExpression('~PreviousError~', $ret);
self::assertMatchesRegularExpression('~333~', $ret);
}

public function testToSafeString(): void
{
self::assertSame('1', RendererAbstract::toSafeString(1));

self::assertSame('\'abc\'', RendererAbstract::toSafeString('abc'));

// to safe string
$ret = RendererAbstract::toSafeString(1);
self::assertSame('1', $ret);
self::assertSame(\stdClass::class, RendererAbstract::toSafeString(new \stdClass()));

$ret = RendererAbstract::toSafeString('abc');
self::assertSame('\'abc\'', $ret);
self::assertSame(\DateTime::class, RendererAbstract::toSafeString(new \DateTime()));

$ret = RendererAbstract::toSafeString(new \stdClass());
self::assertSame('stdClass', $ret);
self::assertSame(\Closure::class, RendererAbstract::toSafeString(static fn () => true));

self::assertSame('resource (stream)', RendererAbstract::toSafeString(opendir(__DIR__)));

$a = new TrackableMock();
$a->shortName = 'foo';
$ret = RendererAbstract::toSafeString($a);
self::assertSame(TrackableMock::class . ' (foo)', $ret);
self::assertSame(TrackableMock::class . ' (foo)', RendererAbstract::toSafeString($a));

$a = new TrackableMock();
self::assertSame(TrackableMock::class . ' ()', RendererAbstract::toSafeString($a));

$a = new TrackableMock2();
$a->shortName = 'foo';
$ret = RendererAbstract::toSafeString($a);
self::assertSame(TrackableMock2::class . ' (foo)', $ret);
self::assertSame(TrackableMock2::class . ' (foo)', RendererAbstract::toSafeString($a));

$a = new TrackableMock2();
$a->name = 'foo';
$ret = RendererAbstract::toSafeString($a);
self::assertSame(TrackableMock2::class . ' (foo)', $ret);
self::assertSame(TrackableMock2::class . ' (foo)', RendererAbstract::toSafeString($a));
}

public function testMore(): void
Expand Down

0 comments on commit c6da2b9

Please sign in to comment.