Skip to content

php without mbstring crashes phpstan #8925

@williamdes

Description

@williamdes

Bug report

Version: 1.9.18


     Internal error: Internal error: Internal error. in file Encoding.php

     Post the following stack trace to https://github.com/phpstan/phpstan/issues/new?template=Bug_report.md:
     #0 phar://<<vendor-folder>>/phpstan/phpstan/phpstan.phar/src/Analyser/MutatingScope.php(1468):
     PHPStan\Type\Php\StrCaseFunctionsReturnTypeExtension->getTypeFromFunctionCall(Object(PHPStan\Reflection\Native\NativeFunctionReflection), Object(PhpParser\Node\Expr\FuncCall),
     Object(PHPStan\Analyser\MutatingScope))
     #1 phar://<<vendor-folder>>/phpstan/phpstan/phpstan.phar/src/Analyser/MutatingScope.php(557): PHPStan\Analyser\MutatingScope->resolveType('\\mb_convert_kan...',
     Object(PhpParser\Node\Expr\FuncCall))
     #2 phar://<<vendor-folder>>/phpstan/phpstan/phpstan.phar/src/Analyser/MutatingScope.php(777): PHPStan\Analyser\MutatingScope->getType(Object(PhpParser\Node\Expr\FuncCall))
     #3 phar://<<vendor-folder>>/phpstan/phpstan/phpstan.phar/src/Analyser/MutatingScope.php(557): PHPStan\Analyser\MutatingScope->resolveType('$dist = \\mb_con...',
     Object(PhpParser\Node\Expr\Assign))
     #4 phar://<<vendor-folder>>/phpstan/phpstan/phpstan.phar/src/Analyser/NodeScopeResolver.php(1446): PHPStan\Analyser\MutatingScope->getType(Object(PhpParser\Node\Expr\Assign))
     #5 phar://<<vendor-folder>>/phpstan/phpstan/phpstan.phar/src/Analyser/NodeScopeResolver.php(557):
     PHPStan\Analyser\NodeScopeResolver->findEarlyTerminatingExpr(Object(PhpParser\Node\Expr\Assign), Object(PHPStan\Analyser\MutatingScope))
     #6 phar://<<vendor-folder>>/phpstan/phpstan/phpstan.phar/src/Analyser/NodeScopeResolver.php(360):
     PHPStan\Analyser\NodeScopeResolver->processStmtNode(Object(PhpParser\Node\Stmt\Expression), Object(PHPStan\Analyser\MutatingScope), Object(Closure), Object(PHPStan\Analyser\StatementContext))
     #7 phar://<<vendor-folder>>/phpstan/phpstan/phpstan.phar/src/Analyser/NodeScopeResolver.php(646):
     PHPStan\Analyser\NodeScopeResolver->processStmtNodes(Object(PhpParser\Node\Stmt\If_), Array, Object(PHPStan\Analyser\MutatingScope), Object(Closure), Object(PHPStan\Analyser\StatementContext))
     #8 phar://<<vendor-folder>>/phpstan/phpstan/phpstan.phar/src/Analyser/NodeScopeResolver.php(360):
     PHPStan\Analyser\NodeScopeResolver->processStmtNode(Object(PhpParser\Node\Stmt\If_), Object(PHPStan\Analyser\MutatingScope), Object(Closure), Object(PHPStan\Analyser\StatementContext))
     #9 phar://<<vendor-folder>>/phpstan/phpstan/phpstan.phar/src/Analyser/NodeScopeResolver.php(521):
     PHPStan\Analyser\NodeScopeResolver->processStmtNodes(Object(PhpParser\Node\Stmt\ClassMethod), Array, Object(PHPStan\Analyser\MutatingScope), Object(Closure), Object(PHPStan\Analyser\StatementContext))
     #10 phar://<<vendor-folder>>/phpstan/phpstan/phpstan.phar/src/Analyser/NodeScopeResolver.php(360):
     PHPStan\Analyser\NodeScopeResolver->processStmtNode(Object(PhpParser\Node\Stmt\ClassMethod), Object(PHPStan\Analyser\MutatingScope), Object(PHPStan\Node\ClassStatementsGatherer),
     Object(PHPStan\Analyser\StatementContext))
     #11 phar://<<vendor-folder>>/phpstan/phpstan/phpstan.phar/src/Analyser/NodeScopeResolver.php(599):
     PHPStan\Analyser\NodeScopeResolver->processStmtNodes(Object(PhpParser\Node\Stmt\Class_), Array, Object(PHPStan\Analyser\MutatingScope), Object(PHPStan\Node\ClassStatementsGatherer),
     Object(PHPStan\Analyser\StatementContext))
     #12 phar://<<vendor-folder>>/phpstan/phpstan/phpstan.phar/src/Analyser/NodeScopeResolver.php(360):
     PHPStan\Analyser\NodeScopeResolver->processStmtNode(Object(PhpParser\Node\Stmt\Class_), Object(PHPStan\Analyser\MutatingScope), Object(Closure), Object(PHPStan\Analyser\StatementContext))
     #13 phar://<<vendor-folder>>/phpstan/phpstan/phpstan.phar/src/Analyser/NodeScopeResolver.php(571):
     PHPStan\Analyser\NodeScopeResolver->processStmtNodes(Object(PhpParser\Node\Stmt\Namespace_), Array, Object(PHPStan\Analyser\MutatingScope), Object(Closure), Object(PHPStan\Analyser\StatementContext))
     #14 phar://<<vendor-folder>>/phpstan/phpstan/phpstan.phar/src/Analyser/NodeScopeResolver.php(327):
     PHPStan\Analyser\NodeScopeResolver->processStmtNode(Object(PhpParser\Node\Stmt\Namespace_), Object(PHPStan\Analyser\MutatingScope), Object(Closure), Object(PHPStan\Analyser\StatementContext))
     #15 phar://<<vendor-folder>>/phpstan/phpstan/phpstan.phar/src/Analyser/FileAnalyser.php(175): PHPStan\Analyser\NodeScopeResolver->processNodes(Array,
     Object(PHPStan\Analyser\MutatingScope), Object(Closure))
     #16 phar://<<vendor-folder>>/phpstan/phpstan/phpstan.phar/src/Command/WorkerCommand.php(148): PHPStan\Analyser\FileAnalyser->analyseFile('/mnt/Dev/@phpmy...', Array,
     Object(PHPStan\Rules\LazyRegistry), Object(PHPStan\Collectors\Registry), NULL)
     #17 phar://<<vendor-folder>>/phpstan/phpstan/phpstan.phar/vendor/evenement/evenement/src/Evenement/EventEmitterTrait.php(97):
     PHPStan\Command\WorkerCommand->PHPStan\Command\{closure}(Array)
     #18 phar://<<vendor-folder>>/phpstan/phpstan/phpstan.phar/vendor/clue/ndjson-react/src/Decoder.php(110): _PHPStan_1f608dc6a\Evenement\EventEmitter->emit('data', Array)
     #19 phar://<<vendor-folder>>/phpstan/phpstan/phpstan.phar/vendor/evenement/evenement/src/Evenement/EventEmitterTrait.php(97):
     _PHPStan_1f608dc6a\Clue\React\NDJson\Decoder->handleData(Array)
     #20 phar://<<vendor-folder>>/phpstan/phpstan/phpstan.phar/vendor/react/stream/src/Util.php(62): _PHPStan_1f608dc6a\Evenement\EventEmitter->emit('data', Array)
     #21 phar://<<vendor-folder>>/phpstan/phpstan/phpstan.phar/vendor/evenement/evenement/src/Evenement/EventEmitterTrait.php(97):
     _PHPStan_1f608dc6a\React\Stream\Util::_PHPStan_1f608dc6a\React\Stream\{closure}('{"action":"anal...')
     #22 phar://<<vendor-folder>>/phpstan/phpstan/phpstan.phar/vendor/react/stream/src/DuplexResourceStream.php(154): _PHPStan_1f608dc6a\Evenement\EventEmitter->emit('data', Array)
     #23 phar://<<vendor-folder>>/phpstan/phpstan/phpstan.phar/vendor/react/event-loop/src/StreamSelectLoop.php(201):
     _PHPStan_1f608dc6a\React\Stream\DuplexResourceStream->handleData(Resource id #13677)
     #24 phar://<<vendor-folder>>/phpstan/phpstan/phpstan.phar/vendor/react/event-loop/src/StreamSelectLoop.php(173):
     _PHPStan_1f608dc6a\React\EventLoop\StreamSelectLoop->waitForStreamActivity(NULL)
     #25 phar://<<vendor-folder>>/phpstan/phpstan/phpstan.phar/src/Command/WorkerCommand.php(108): _PHPStan_1f608dc6a\React\EventLoop\StreamSelectLoop->run()
     #26 phar://<<vendor-folder>>/phpstan/phpstan/phpstan.phar/vendor/symfony/console/Command/Command.php(259):
     PHPStan\Command\WorkerCommand->execute(Object(_PHPStan_1f608dc6a\Symfony\Component\Console\Input\ArgvInput), Object(_PHPStan_1f608dc6a\Symfony\Component\Console\Output\ConsoleOutput))
     #27 phar://<<vendor-folder>>/phpstan/phpstan/phpstan.phar/vendor/symfony/console/Application.php(870):
     _PHPStan_1f608dc6a\Symfony\Component\Console\Command\Command->run(Object(_PHPStan_1f608dc6a\Symfony\Component\Console\Input\ArgvInput),
     Object(_PHPStan_1f608dc6a\Symfony\Component\Console\Output\ConsoleOutput))
     #28 phar://<<vendor-folder>>/phpstan/phpstan/phpstan.phar/vendor/symfony/console/Application.php(261):
     _PHPStan_1f608dc6a\Symfony\Component\Console\Application->doRunCommand(Object(PHPStan\Command\WorkerCommand), Object(_PHPStan_1f608dc6a\Symfony\Component\Console\Input\ArgvInput),
     Object(_PHPStan_1f608dc6a\Symfony\Component\Console\Output\ConsoleOutput))
     #29 phar://<<vendor-folder>>/phpstan/phpstan/phpstan.phar/vendor/symfony/console/Application.php(157):
     _PHPStan_1f608dc6a\Symfony\Component\Console\Application->doRun(Object(_PHPStan_1f608dc6a\Symfony\Component\Console\Input\ArgvInput),
     Object(_PHPStan_1f608dc6a\Symfony\Component\Console\Output\ConsoleOutput))
     #30 phar://<<vendor-folder>>/phpstan/phpstan/phpstan.phar/bin/phpstan(124): _PHPStan_1f608dc6a\Symfony\Component\Console\Application->run()
     #31 phar://<<vendor-folder>>/phpstan/phpstan/phpstan.phar/bin/phpstan(125): _PHPStan_1f608dc6a\{closure}()
     #32 <<vendor-folder>>/phpstan/phpstan/phpstan(7): require('phar:///mnt/Dev...')
     #33 <<vendor-folder>>/bin/phpstan(115): include('/mnt/Dev/@phpmy...')
     #34 {main}
     Internal error: Internal error: Internal error. in file /mnt/Dev/@phpmyadmin/phpMyAdmin-QA_5_2/test/classes/EncodingTest.php

     Post the following stack trace to https://github.com/phpstan/phpstan/issues/new?template=Bug_report.md:
     #0 phar://<<vendor-folder>>/phpstan/phpstan/phpstan.phar/src/Analyser/MutatingScope.php(1468):
     PHPStan\Type\Php\StrCaseFunctionsReturnTypeExtension->getTypeFromFunctionCall(Object(PHPStan\Reflection\Native\NativeFunctionReflection), Object(PhpParser\Node\Expr\FuncCall),
     Object(PHPStan\Analyser\MutatingScope))
     #1 phar://<<vendor-folder>>/phpstan/phpstan/phpstan.phar/src/Analyser/MutatingScope.php(557): PHPStan\Analyser\MutatingScope->resolveType('\\mb_convert_kan...',
     Object(PhpParser\Node\Expr\FuncCall))
     #2 phar://<<vendor-folder>>/phpstan/phpstan/phpstan.phar/src/Rules/FunctionCallParametersCheck.php(114):
     PHPStan\Analyser\MutatingScope->getType(Object(PhpParser\Node\Expr\FuncCall))
     #3 phar://<<vendor-folder>>/phpstan/phpstan/phpstan.phar/src/Rules/Methods/CallMethodsRule.php(48):
     PHPStan\Rules\FunctionCallParametersCheck->check(Object(PHPStan\Reflection\ResolvedFunctionVariant), Object(PHPStan\Analyser\MutatingScope), false, Object(PhpParser\Node\Expr\MethodCall), Array)
     #4 phar://<<vendor-folder>>/phpstan/phpstan/phpstan.phar/src/Analyser/FileAnalyser.php(106):
     PHPStan\Rules\Methods\CallMethodsRule->processNode(Object(PhpParser\Node\Expr\MethodCall), Object(PHPStan\Analyser\MutatingScope))
     #5 phar://<<vendor-folder>>/phpstan/phpstan/phpstan.phar/src/Node/ClassStatementsGatherer.php(98):
     PHPStan\Analyser\FileAnalyser->PHPStan\Analyser\{closure}(Object(PhpParser\Node\Expr\MethodCall), Object(PHPStan\Analyser\MutatingScope))
     #6 phar://<<vendor-folder>>/phpstan/phpstan/phpstan.phar/src/Analyser/NodeScopeResolver.php(506):
     PHPStan\Node\ClassStatementsGatherer->__invoke(Object(PhpParser\Node\Expr\MethodCall), Object(PHPStan\Analyser\MutatingScope))
     #7 phar://<<vendor-folder>>/phpstan/phpstan/phpstan.phar/src/Analyser/NodeScopeResolver.php(2478):
     PHPStan\Analyser\NodeScopeResolver::PHPStan\Analyser\{closure}(Object(PhpParser\Node\Expr\MethodCall), Object(PHPStan\Analyser\MutatingScope))
     #8 phar://<<vendor-folder>>/phpstan/phpstan/phpstan.phar/src/Analyser/NodeScopeResolver.php(1471):
     PHPStan\Analyser\NodeScopeResolver->callNodeCallbackWithExpression(Object(Closure), Object(PhpParser\Node\Expr\MethodCall), Object(PHPStan\Analyser\MutatingScope),
     Object(PHPStan\Analyser\ExpressionContext))
     #9 phar://<<vendor-folder>>/phpstan/phpstan/phpstan.phar/src/Analyser/NodeScopeResolver.php(558):
     PHPStan\Analyser\NodeScopeResolver->processExprNode(Object(PhpParser\Node\Expr\MethodCall), Object(PHPStan\Analyser\MutatingScope), Object(Closure), Object(PHPStan\Analyser\ExpressionContext))
     #10 phar://<<vendor-folder>>/phpstan/phpstan/phpstan.phar/src/Analyser/NodeScopeResolver.php(360):
     PHPStan\Analyser\NodeScopeResolver->processStmtNode(Object(PhpParser\Node\Stmt\Expression), Object(PHPStan\Analyser\MutatingScope), Object(Closure), Object(PHPStan\Analyser\StatementContext))
     #11 phar://<<vendor-folder>>/phpstan/phpstan/phpstan.phar/src/Analyser/NodeScopeResolver.php(521):
     PHPStan\Analyser\NodeScopeResolver->processStmtNodes(Object(PhpParser\Node\Stmt\ClassMethod), Array, Object(PHPStan\Analyser\MutatingScope), Object(Closure), Object(PHPStan\Analyser\StatementContext))
     #12 phar://<<vendor-folder>>/phpstan/phpstan/phpstan.phar/src/Analyser/NodeScopeResolver.php(360):
     PHPStan\Analyser\NodeScopeResolver->processStmtNode(Object(PhpParser\Node\Stmt\ClassMethod), Object(PHPStan\Analyser\MutatingScope), Object(PHPStan\Node\ClassStatementsGatherer),
     Object(PHPStan\Analyser\StatementContext))
     #13 phar://<<vendor-folder>>/phpstan/phpstan/phpstan.phar/src/Analyser/NodeScopeResolver.php(599):
     PHPStan\Analyser\NodeScopeResolver->processStmtNodes(Object(PhpParser\Node\Stmt\Class_), Array, Object(PHPStan\Analyser\MutatingScope), Object(PHPStan\Node\ClassStatementsGatherer),
     Object(PHPStan\Analyser\StatementContext))
     #14 phar://<<vendor-folder>>/phpstan/phpstan/phpstan.phar/src/Analyser/NodeScopeResolver.php(360):
     PHPStan\Analyser\NodeScopeResolver->processStmtNode(Object(PhpParser\Node\Stmt\Class_), Object(PHPStan\Analyser\MutatingScope), Object(Closure), Object(PHPStan\Analyser\StatementContext))
     #15 phar://<<vendor-folder>>/phpstan/phpstan/phpstan.phar/src/Analyser/NodeScopeResolver.php(571):
     PHPStan\Analyser\NodeScopeResolver->processStmtNodes(Object(PhpParser\Node\Stmt\Namespace_), Array, Object(PHPStan\Analyser\MutatingScope), Object(Closure), Object(PHPStan\Analyser\StatementContext))
     #16 phar://<<vendor-folder>>/phpstan/phpstan/phpstan.phar/src/Analyser/NodeScopeResolver.php(327):
     PHPStan\Analyser\NodeScopeResolver->processStmtNode(Object(PhpParser\Node\Stmt\Namespace_), Object(PHPStan\Analyser\MutatingScope), Object(Closure), Object(PHPStan\Analyser\StatementContext))
     #17 phar://<<vendor-folder>>/phpstan/phpstan/phpstan.phar/src/Analyser/FileAnalyser.php(175): PHPStan\Analyser\NodeScopeResolver->processNodes(Array,
     Object(PHPStan\Analyser\MutatingScope), Object(Closure))
     #18 phar://<<vendor-folder>>/phpstan/phpstan/phpstan.phar/src/Command/WorkerCommand.php(148): PHPStan\Analyser\FileAnalyser->analyseFile('/mnt/Dev/@phpmy...', Array,
     Object(PHPStan\Rules\LazyRegistry), Object(PHPStan\Collectors\Registry), NULL)
     #19 phar://<<vendor-folder>>/phpstan/phpstan/phpstan.phar/vendor/evenement/evenement/src/Evenement/EventEmitterTrait.php(97):
     PHPStan\Command\WorkerCommand->PHPStan\Command\{closure}(Array)
     #20 phar://<<vendor-folder>>/phpstan/phpstan/phpstan.phar/vendor/clue/ndjson-react/src/Decoder.php(110): _PHPStan_1f608dc6a\Evenement\EventEmitter->emit('data', Array)
     #21 phar://<<vendor-folder>>/phpstan/phpstan/phpstan.phar/vendor/evenement/evenement/src/Evenement/EventEmitterTrait.php(97):
     _PHPStan_1f608dc6a\Clue\React\NDJson\Decoder->handleData(Array)
     #22 phar://<<vendor-folder>>/phpstan/phpstan/phpstan.phar/vendor/react/stream/src/Util.php(62): _PHPStan_1f608dc6a\Evenement\EventEmitter->emit('data', Array)
     #23 phar://<<vendor-folder>>/phpstan/phpstan/phpstan.phar/vendor/evenement/evenement/src/Evenement/EventEmitterTrait.php(97):
     _PHPStan_1f608dc6a\React\Stream\Util::_PHPStan_1f608dc6a\React\Stream\{closure}('{"action":"anal...')
     #24 phar://<<vendor-folder>>/phpstan/phpstan/phpstan.phar/vendor/react/stream/src/DuplexResourceStream.php(154): _PHPStan_1f608dc6a\Evenement\EventEmitter->emit('data', Array)
     #25 phar://<<vendor-folder>>/phpstan/phpstan/phpstan.phar/vendor/react/event-loop/src/StreamSelectLoop.php(201):
     _PHPStan_1f608dc6a\React\Stream\DuplexResourceStream->handleData(Resource id #13677)
     #26 phar://<<vendor-folder>>/phpstan/phpstan/phpstan.phar/vendor/react/event-loop/src/StreamSelectLoop.php(173):
     _PHPStan_1f608dc6a\React\EventLoop\StreamSelectLoop->waitForStreamActivity(NULL)
     #27 phar://<<vendor-folder>>/phpstan/phpstan/phpstan.phar/src/Command/WorkerCommand.php(108): _PHPStan_1f608dc6a\React\EventLoop\StreamSelectLoop->run()
     #28 phar://<<vendor-folder>>/phpstan/phpstan/phpstan.phar/vendor/symfony/console/Command/Command.php(259):
     PHPStan\Command\WorkerCommand->execute(Object(_PHPStan_1f608dc6a\Symfony\Component\Console\Input\ArgvInput), Object(_PHPStan_1f608dc6a\Symfony\Component\Console\Output\ConsoleOutput))
     #29 phar://<<vendor-folder>>/phpstan/phpstan/phpstan.phar/vendor/symfony/console/Application.php(870):
     _PHPStan_1f608dc6a\Symfony\Component\Console\Command\Command->run(Object(_PHPStan_1f608dc6a\Symfony\Component\Console\Input\ArgvInput),
     Object(_PHPStan_1f608dc6a\Symfony\Component\Console\Output\ConsoleOutput))
     #30 phar://<<vendor-folder>>/phpstan/phpstan/phpstan.phar/vendor/symfony/console/Application.php(261):
     _PHPStan_1f608dc6a\Symfony\Component\Console\Application->doRunCommand(Object(PHPStan\Command\WorkerCommand), Object(_PHPStan_1f608dc6a\Symfony\Component\Console\Input\ArgvInput),
     Object(_PHPStan_1f608dc6a\Symfony\Component\Console\Output\ConsoleOutput))
     #31 phar://<<vendor-folder>>/phpstan/phpstan/phpstan.phar/vendor/symfony/console/Application.php(157):
     _PHPStan_1f608dc6a\Symfony\Component\Console\Application->doRun(Object(_PHPStan_1f608dc6a\Symfony\Component\Console\Input\ArgvInput),
     Object(_PHPStan_1f608dc6a\Symfony\Component\Console\Output\ConsoleOutput))
     #32 phar://<<vendor-folder>>/phpstan/phpstan/phpstan.phar/bin/phpstan(124): _PHPStan_1f608dc6a\Symfony\Component\Console\Application->run()
     #33 phar://<<vendor-folder>>/phpstan/phpstan/phpstan.phar/bin/phpstan(125): _PHPStan_1f608dc6a\{closure}()
     #34 <<vendor-folder>>/phpstan/phpstan/phpstan(7): require('phar:///mnt/Dev...')
     #35 <<vendor-folder>>/bin/phpstan(115): include('/mnt/Dev/@phpmy...')
     #36 {main}
     Child process error (exit code 1):
     Child process error (exit code 1):

Code snippet that reproduces the problem

<?php

    function kanjiStrConv(string $str, string $enc, string $kana): string
    {
        $string_encoding = mb_detect_encoding($str, self::$kanjiEncodings);
        if ($kana === 'kana') {
            $dist = mb_convert_kana($str, 'KV', $string_encoding);
        }


        if ($string_encoding != $enc && $enc != '') {
            return mb_convert_encoding($str, $enc, $string_encoding);
        }

        return $str;
    }

Expected output

No error

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions