|
11 | 11 | use phpDocumentor\Reflection\Types\Never_; |
12 | 12 | use phpDocumentor\Reflection\Types\Void_; |
13 | 13 | use PhpParser\Comment\Doc; |
| 14 | +use PhpParser\ConstExprEvaluationException; |
| 15 | +use PhpParser\ConstExprEvaluator; |
14 | 16 | use PhpParser\Node; |
15 | 17 | use PhpParser\NodeFinder; |
16 | 18 | use PhpParser\Node\Identifier; |
17 | 19 | use PhpParser\Node\Name; |
18 | | -use PhpParser\Node\Expr\Array_; |
19 | | -use PhpParser\Node\Expr\ArrayItem; |
20 | 20 | use PhpParser\Node\Expr\Exit_; |
21 | 21 | use PhpParser\Node\Expr\FuncCall; |
22 | | -use PhpParser\Node\Scalar\String_; |
23 | 22 | use PhpParser\Node\Stmt\Class_; |
24 | 23 | use PhpParser\Node\Stmt\ClassMethod; |
25 | 24 | use PhpParser\Node\Stmt\Expression; |
@@ -1117,23 +1116,23 @@ static function (Node $node): bool { |
1117 | 1116 | return 'never'; |
1118 | 1117 | } |
1119 | 1118 | // If wp_die is called with 3rd parameter, we need additional checks. |
1120 | | - $argValue = $args[2]->value; |
1121 | | - if (!($argValue instanceof Array_)) { |
| 1119 | + try { |
| 1120 | + $arg = (new ConstExprEvaluator())->evaluateSilently($args[2]->value); |
| 1121 | + } catch (ConstExprEvaluationException $e) { |
| 1122 | + // If we don't know the value of the 3rd parameter, we can't be sure. |
1122 | 1123 | continue; |
1123 | 1124 | } |
1124 | | - foreach ($argValue->items as $item) { |
1125 | | - if (!($item instanceof ArrayItem && $item->key instanceof String_ && $item->key->value === 'exit')) { |
1126 | | - continue; |
1127 | | - } |
1128 | | - if ( |
1129 | | - ($item->value instanceof Node\Expr\ConstFetch && strtolower($item->value->name->toString()) === 'true') |
1130 | | - || ($item->value instanceof Node\Scalar\LNumber && $item->value->value === 1) |
1131 | | - || ($item->value instanceof Node\Scalar\String_ && $item->value->value !== '' && $item->value->value !== '0') |
1132 | | - ) { |
| 1125 | + |
| 1126 | + if (is_int($arg)) { |
| 1127 | + return 'never'; |
| 1128 | + } |
| 1129 | + if (is_array($arg)) { |
| 1130 | + if (!isset($arg['exit']) || (bool)$arg['exit'] === true) { |
1133 | 1131 | return 'never'; |
1134 | 1132 | } |
1135 | | - return ''; |
1136 | 1133 | } |
| 1134 | + |
| 1135 | + continue; |
1137 | 1136 | } |
1138 | 1137 | return ''; |
1139 | 1138 | } |
|
0 commit comments