ResponseStatusCodeRector crashes on first-class callable of a method named assert*
Nessuno ha ancora preso questa issue.
Valutazione
- Difficoltà
- 2/5
- Tempo stimato
- 1-3 ore
- Idoneità per principianti
- 85/100
Direzione di ricerca
L'arresto anomalo si verifica in rules/CodeQuality/Rector/BinaryOp/ResponseStatusCodeRector.php: processMethodCall() instrada qualsiasi nome di metodo che inizia con assert a processAssertMethodCall(), che chiama getArgs() su un callable di prima classe. Inizia leggendo questi due metodi, poi aggiungi un ritorno anticipato per i callable di prima classe. Il lavoro è completato quando il file di riproduzione nell'issue viene ignorato senza errori con php -d zend.assertions=1 e un fixture di test della regola lo copre.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Descrizione
Bug Report
| Subject | Details |
|---|---|
| Rector version | Rector 2.8.3 (also 2.5.7) |
ResponseStatusCodeRector crashes when it visits a first-class callable whose method name starts with assert, for example $validator->assert(...). This is a common pattern with validation libraries such as PSL (Psl\Type\string()->assert(...)).
processMethodCall() sends every method call whose name starts with assert to processAssertMethodCall():
processAssertMethodCall() then calls getArgs() without a first-class callable check, and the php-parser assertion fails:
[ERROR] Could not process "src/Example.php" file, due to:
"System error: "assert(!$this->isPartialFunctionApplication())"
Stack trace:
#0 vendor/rector/rector/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/CallLike.php(50): assert()
#1 vendor/rector/rector/vendor/rector/rector-symfony/rules/CodeQuality/Rector/BinaryOp/ResponseStatusCodeRector.php(155): PhpParser\Node\Expr\CallLike->getArgs()
#2 vendor/rector/rector/vendor/rector/rector-symfony/rules/CodeQuality/Rector/BinaryOp/ResponseStatusCodeRector.php(105): Rector\Symfony\CodeQuality\Rector\BinaryOp\ResponseStatusCodeRector->processAssertMethodCall()
#3 vendor/rector/rector/vendor/rector/rector-symfony/rules/CodeQuality/Rector/BinaryOp/ResponseStatusCodeRector.php(94): Rector\Symfony\CodeQuality\Rector\BinaryOp\ResponseStatusCodeRector->processMethodCall()
In Rector 2.5.7 the message is assert(!$this->isFirstClassCallable()). The crash needs zend.assertions = 1, which is the PHP CLI default in development setups.
Minimal PHP Code Causing Issue
<?php
final class Validator
{
public function assert(mixed $value): string
{
return (string) $value;
}
}
$validator = new Validator();
$values = array_map($validator->assert(...), ['a', 'b']);
<?php
use Rector\Config\RectorConfig;
use Rector\Symfony\CodeQuality\Rector\BinaryOp\ResponseStatusCodeRector;
return RectorConfig::configure()
->withPaths([__DIR__ . '/src'])
->withRules([ResponseStatusCodeRector::class]);
Run: php -d zend.assertions=1 vendor/bin/rector process --dry-run
Expected Behaviour
Rector should skip the node. A first-class callable has no arguments to inspect. A guard at the start of processMethodCall() would fix it. isPartialFunctionApplication() also covers first-class callables in the php-parser version that Rector 2.8.3 bundles:
if ($methodCall->isPartialFunctionApplication()) {
return null;
}
- Lingua principale
- PHP
- Stelle
- 10.5k
- Fork
- 742
- Metriche di merge delle PR
- Nessuna PR unita negli ultimi 30g
Preparare l'ambiente
- Nessun Dockerfile né file Docker Compose
- Nessun modello di pull request
- Leggi la guida per i contributori
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Altre issue di rectorphp/rector
-
RemoveDefaultValueFromAssignedPropertyRector does not work with nested conditional assignmentsApertabug
Difficoltà 4/5 3-5 giorni Idoneità per principianti 40/100
-
bug
Difficoltà 3/5 Mezza giornata Idoneità per principianti 55/100
-
[PHPUnit] AddInstanceofAssertForNullableInstanceRector enters an infinite loop on a test traitForse già presa @samsonasik l’ha presa oggi. Apertabug
Difficoltà 4/5 1-2 giorni Idoneità per principianti 25/100
-
bug
Difficoltà 3/5 1-2 giorni Idoneità per principianti 45/100
-
Difficoltà 3/5 1-2 giorni Idoneità per principianti 52/100
Tutte le issue di rectorphp/rector
Issue simili
-
0. Needs triage 35-feedback bug
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 62/100
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 72/100
getgrav/grav-plugin-api#74 ·
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 68/100
PrestaShopCorp/ps_eventbus#505 ·
-
`path` option is dropped from request URLs when it has no trailing slashForse già presa @RaphaelFakhri l’ha presa oggi. Aperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 74/100
pusher/pusher-http-php#411 ·
-
AuthorizationGuard::refreshUser() drops the decoded access token, so permission checks fail afterwardsForse già presa @RaphaelFakhri l’ha presa oggi. Aperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 76/100
auth0/laravel-auth0#503 ·