psalm icon indicating copy to clipboard operation
psalm copied to clipboard

AssertionError on taint-analysis of the first-class-callables

Open alies-dev opened this issue 3 years ago • 4 comments

https://psalm.dev/r/0eddd75e6b (not reproducible as it's not possible to enable taint-analysis)

Affected versions: 5.4.0, master 11942d7

Uncaught Exception: AssertionError assert(!$this->isFirstClassCallable()) (23%)
Emitted in some_dirpsalm/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/CallLike.php:36
Stack trace in the forked worker:
#0 some_dirpsalm/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/CallLike.php(36): assert(false, 'assert(!$this->...')
#1 some_dirpsalm/vendor/vimeo/psalm/src/Psalm/Internal/Analyzer/Statements/Expression/Call/FunctionCallReturnTypeFetcher.php(658): PhpParser\Node\Expr\CallLike->getArgs()
#2 some_dirpsalm/vendor/vimeo/psalm/src/Psalm/Internal/Analyzer/Statements/Expression/Call/FunctionCallReturnTypeFetcher.php(264): Psalm\Internal\Analyzer\Statements\Expression\Call\FunctionCallReturnTypeFetcher::taintReturnType(Object(Psalm\Internal\Analyzer\StatementsAnalyzer), Object(PhpParser\Node\Expr\FuncCall), 'trim', Object(Psalm\Storage\FunctionStorage), Object(Psalm\Type\Union), Object(Psalm\Internal\Type\TemplateResult), Object(Psalm\Context))
#3 some_dirpsalm/vendor/vimeo/psalm/src/Psalm/Internal/Analyzer/Statements/Expression/Call/FunctionCallAnalyzer.php(252): Psalm\Internal\Analyzer\Statements\Expression\Call\FunctionCallReturnTypeFetcher::fetch(Object(Psalm\Internal\Analyzer\StatementsAnalyzer), Object(Psalm\Codebase), Object(PhpParser\Node\Expr\FuncCall), Object(PhpParser\Node\Name), 'trim', true, true, Object(Psalm\Storage\FunctionStorage), NULL, Object(Psalm\Internal\Type\TemplateResult), Object(Psalm\Context))
#4 some_dirpsalm/vendor/vimeo/psalm/src/Psalm/Internal/Analyzer/Statements/ExpressionAnalyzer.php(296): Psalm\Internal\Analyzer\Statements\Expression\Call\FunctionCallAnalyzer::analyze(Object(Psalm\Internal\Analyzer\StatementsAnalyzer), Object(PhpParser\Node\Expr\FuncCall), Object(Psalm\Context), Object(Psalm\Internal\Type\TemplateResult))
#5 some_dirpsalm/vendor/vimeo/psalm/src/Psalm/Internal/Analyzer/Statements/ExpressionAnalyzer.php(86): Psalm\Internal\Analyzer\Statements\ExpressionAnalyzer::handleExpression(Object(Psalm\Internal\Analyzer\StatementsAnalyzer), Object(PhpParser\Node\Expr\FuncCall), Object(Psalm\Context), false, NULL, false, NULL, false)

alies-dev avatar Jan 13 '23 21:01 alies-dev

I found these snippets:

https://psalm.dev/r/0eddd75e6b
<?php

/**
 * @param list<string> $l
 */
function trimArray(array $l): array {
    return array_map(trim(...), $l);
}
Psalm output (using commit 11942d7):

No issues!

psalm-github-bot[bot] avatar Jan 13 '23 21:01 psalm-github-bot[bot]

https://psalm.dev/r/d13ceae033

orklah avatar Jan 14 '23 09:01 orklah

I found these snippets:

https://psalm.dev/r/d13ceae033
<?php // --taint-analysis

/**
 * @param list<string> $l
 */
function trimArray(array $l): array {
    return array_map(trim(...), $l);
}
Psalm encountered an internal error:

/vendor/vimeo/psalm/src/Psalm/CodeLocation.php: Psalm\CodeLocation::__construct(): Argument #2 ($stmt) must be of type PhpParser\Node, null given, called in /vendor/vimeo/psalm/src/Psalm/Internal/Analyzer/Statements/Expression/Call/FunctionCallReturnTypeFetcher.php on line 715

psalm-github-bot[bot] avatar Jan 14 '23 09:01 psalm-github-bot[bot]

Any updates?

Norbytus avatar Jul 03 '24 12:07 Norbytus