Skip to content

Commit 2ca4545

Browse files
committed
ensure compatibility with PHP 8 stack traces
1 parent 13982b5 commit 2ca4545

File tree

2 files changed

+61
-2
lines changed

2 files changed

+61
-2
lines changed

src/Symfony/Component/Cache/Adapter/PhpArrayAdapter.php

+33-2
Original file line numberDiff line numberDiff line change
@@ -275,9 +275,40 @@ public static function throwOnRequiredClass($class)
275275
'function' => 'spl_autoload_call',
276276
'args' => [$class],
277277
];
278-
$i = 1 + array_search($autoloadFrame, $trace, true);
279278

280-
if (isset($trace[$i]['function']) && !isset($trace[$i]['class'])) {
279+
if (false === $i = array_search($autoloadFrame, $trace, true)) {
280+
if (\PHP_VERSION_ID >= 80000) {
281+
foreach ($trace as $frame) {
282+
if ([$class] !== $frame['args']) {
283+
continue;
284+
}
285+
286+
if (isset($frame['function']) && !isset($frame['class'])) {
287+
switch ($frame['function']) {
288+
case 'get_class_methods':
289+
case 'get_class_vars':
290+
case 'get_parent_class':
291+
case 'is_a':
292+
case 'is_subclass_of':
293+
case 'class_exists':
294+
case 'class_implements':
295+
case 'class_parents':
296+
case 'trait_exists':
297+
case 'defined':
298+
case 'interface_exists':
299+
case 'method_exists':
300+
case 'property_exists':
301+
case 'is_callable':
302+
return;
303+
}
304+
}
305+
}
306+
}
307+
308+
throw $e;
309+
}
310+
311+
if (isset($trace[++$i]['function']) && !isset($trace[$i]['class'])) {
281312
switch ($trace[$i]['function']) {
282313
case 'get_class_methods':
283314
case 'get_class_vars':

src/Symfony/Component/Config/Resource/ClassExistenceResource.php

+28
Original file line numberDiff line numberDiff line change
@@ -191,6 +191,34 @@ public static function throwOnRequiredClass($class, \Exception $previous = null)
191191
];
192192

193193
if (false === $i = array_search($autoloadFrame, $trace, true)) {
194+
if (\PHP_VERSION_ID >= 80000) {
195+
foreach ($trace as $frame) {
196+
if ([$class] !== $frame['args']) {
197+
continue;
198+
}
199+
200+
if (isset($frame['function']) && !isset($frame['class'])) {
201+
switch ($frame['function']) {
202+
case 'get_class_methods':
203+
case 'get_class_vars':
204+
case 'get_parent_class':
205+
case 'is_a':
206+
case 'is_subclass_of':
207+
case 'class_exists':
208+
case 'class_implements':
209+
case 'class_parents':
210+
case 'trait_exists':
211+
case 'defined':
212+
case 'interface_exists':
213+
case 'method_exists':
214+
case 'property_exists':
215+
case 'is_callable':
216+
return;
217+
}
218+
}
219+
}
220+
}
221+
194222
throw $e;
195223
}
196224

0 commit comments

Comments
 (0)