Skip to content

Commit 1d02c4f

Browse files
committed
Fix more potential for infinite recursion
1 parent bb3da26 commit 1d02c4f

File tree

2 files changed

+8
-4
lines changed

2 files changed

+8
-4
lines changed

src/Type/ObjectType.php

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1248,10 +1248,13 @@ public function getEnumCases(): array
12481248

12491249
public function isCallable(): TrinaryLogic
12501250
{
1251-
$parametersAcceptors = $this->findCallableParametersAcceptors();
1251+
$parametersAcceptors = RecursionGuard::run($this, fn () => $this->findCallableParametersAcceptors());
12521252
if ($parametersAcceptors === null) {
12531253
return TrinaryLogic::createNo();
12541254
}
1255+
if ($parametersAcceptors instanceof ErrorType) {
1256+
return TrinaryLogic::createNo();
1257+
}
12551258

12561259
if (
12571260
count($parametersAcceptors) === 1

src/Type/RecursionGuard.php

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,10 +9,11 @@ class RecursionGuard
99
private static array $context = [];
1010

1111
/**
12-
* @param callable(): Type $callback
13-
*
12+
* @template T
13+
* @param callable(): T $callback
14+
* @return T|ErrorType
1415
*/
15-
public static function run(Type $type, callable $callback): Type
16+
public static function run(Type $type, callable $callback)
1617
{
1718
$key = $type->describe(VerbosityLevel::value());
1819
if (isset(self::$context[$key])) {

0 commit comments

Comments
 (0)