PHP-Parser
PHP-Parser copied to clipboard
ValueError thrown when using PrettyPrinterAbstract::printFormatPreserving()
I noticed a ValueError bein thrown in setIndentLevel, because a number smaller than 0 is passed to str_repeat. I am on the php8.1-cli docker image and using v5.1.0 of the package.
Here is the stack trace:
PHP Fatal error: Uncaught ValueError: str_repeat(): Argument #2 ($times) must be greater than or equal to 0 in /usr/local/src/phpmigrator/vendor/nikic/php-parser/lib/PhpParser/PrettyPrinterAbstract.php:213
Stack trace:
#0 /usr/local/src/phpmigrator/vendor/nikic/php-parser/lib/PhpParser/PrettyPrinterAbstract.php(213): str_repeat()
#1 /usr/local/src/phpmigrator/vendor/nikic/php-parser/lib/PhpParser/PrettyPrinterAbstract.php(818): PhpParser\PrettyPrinterAbstract->setIndentLevel()
#2 /usr/local/src/phpmigrator/vendor/nikic/php-parser/lib/PhpParser/PrettyPrinterAbstract.php(636): PhpParser\PrettyPrinterAbstract->pArray()
#3 /usr/local/src/phpmigrator/vendor/nikic/php-parser/lib/PhpParser/PrettyPrinterAbstract.php(725): PhpParser\PrettyPrinterAbstract->p()
#4 /usr/local/src/phpmigrator/vendor/nikic/php-parser/lib/PhpParser/PrettyPrinterAbstract.php(446): PhpParser\PrettyPrinterAbstract->p()
#5 /usr/local/src/phpmigrator/vendor/nikic/php-parser/lib/PhpParser/PrettyPrinterAbstract.php(461): PhpParser\PrettyPrinterAbstract->pImplode()
#6 /usr/local/src/phpmigrator/vendor/nikic/php-parser/lib/PhpParser/PrettyPrinter/Standard.php(1161): PhpParser\PrettyPrinterAbstract->pCommaSeparated()
#7 /usr/local/src/phpmigrator/vendor/nikic/php-parser/lib/PhpParser/PrettyPrinter/Standard.php(539): PhpParser\PrettyPrinter\Standard->pMaybeMultiline()
#8 /usr/local/src/phpmigrator/vendor/nikic/php-parser/lib/PhpParser/PrettyPrinterAbstract.php(560): PhpParser\PrettyPrinter\Standard->pExpr_StaticCall()
#9 /usr/local/src/phpmigrator/vendor/nikic/php-parser/lib/PhpParser/PrettyPrinterAbstract.php(587): PhpParser\PrettyPrinterAbstract->pFallback()
#10 /usr/local/src/phpmigrator/vendor/nikic/php-parser/lib/PhpParser/PrettyPrinterAbstract.php(725): PhpParser\PrettyPrinterAbstract->p()
#11 /usr/local/src/phpmigrator/vendor/nikic/php-parser/lib/PhpParser/PrettyPrinterAbstract.php(446): PhpParser\PrettyPrinterAbstract->p()
#12 /usr/local/src/phpmigrator/vendor/nikic/php-parser/lib/PhpParser/PrettyPrinterAbstract.php(461): PhpParser\PrettyPrinterAbstract->pImplode()
#13 /usr/local/src/phpmigrator/vendor/nikic/php-parser/lib/PhpParser/PrettyPrinter/Standard.php(1161): PhpParser\PrettyPrinterAbstract->pCommaSeparated()
#14 /usr/local/src/phpmigrator/vendor/nikic/php-parser/lib/PhpParser/PrettyPrinter/Standard.php(539): PhpParser\PrettyPrinter\Standard->pMaybeMultiline()
#15 /usr/local/src/phpmigrator/vendor/nikic/php-parser/lib/PhpParser/PrettyPrinterAbstract.php(560): PhpParser\PrettyPrinter\Standard->pExpr_StaticCall()
#16 /usr/local/src/phpmigrator/vendor/nikic/php-parser/lib/PhpParser/PrettyPrinterAbstract.php(587): PhpParser\PrettyPrinterAbstract->pFallback()
#17 /usr/local/src/phpmigrator/vendor/nikic/php-parser/lib/PhpParser/PrettyPrinterAbstract.php(1034): PhpParser\PrettyPrinterAbstract->p()
#18 /usr/local/src/phpmigrator/vendor/nikic/php-parser/lib/PhpParser/PrettyPrinterAbstract.php(723): PhpParser\PrettyPrinterAbstract->pFixup()
#19 /usr/local/src/phpmigrator/vendor/nikic/php-parser/lib/PhpParser/PrettyPrinterAbstract.php(725): PhpParser\PrettyPrinterAbstract->p()
#20 /usr/local/src/phpmigrator/vendor/nikic/php-parser/lib/PhpParser/PrettyPrinterAbstract.php(958): PhpParser\PrettyPrinterAbstract->p()
#21 /usr/local/src/phpmigrator/vendor/nikic/php-parser/lib/PhpParser/PrettyPrinterAbstract.php(636): PhpParser\PrettyPrinterAbstract->pArray()
#22 /usr/local/src/phpmigrator/vendor/nikic/php-parser/lib/PhpParser/PrettyPrinterAbstract.php(958): PhpParser\PrettyPrinterAbstract->p()
#23 /usr/local/src/phpmigrator/vendor/nikic/php-parser/lib/PhpParser/PrettyPrinterAbstract.php(636): PhpParser\PrettyPrinterAbstract->pArray()
#24 /usr/local/src/phpmigrator/vendor/nikic/php-parser/lib/PhpParser/PrettyPrinterAbstract.php(958): PhpParser\PrettyPrinterAbstract->p()
#25 /usr/local/src/phpmigrator/vendor/nikic/php-parser/lib/PhpParser/PrettyPrinterAbstract.php(636): PhpParser\PrettyPrinterAbstract->pArray()
#26 /usr/local/src/phpmigrator/vendor/nikic/php-parser/lib/PhpParser/PrettyPrinterAbstract.php(958): PhpParser\PrettyPrinterAbstract->p()
#27 /usr/local/src/phpmigrator/vendor/nikic/php-parser/lib/PhpParser/PrettyPrinterAbstract.php(547): PhpParser\PrettyPrinterAbstract->pArray()
#28 /usr/local/src/phpmigrator/src/Cmd/CmdTrait.php(55): PhpParser\PrettyPrinterAbstract->printFormatPreserving()
#29 /usr/local/src/phpmigrator/src/App.php(33): DynCom\Phpmigrator\Cmd\Php8\InternalFnExceptions\Cmd->run()
#30 /usr/local/src/phpmigrator/main.php(19): DynCom\Phpmigrator\App::main()
#31 {main}
thrown in /usr/local/src/phpmigrator/vendor/nikic/php-parser/lib/PhpParser/PrettyPrinterAbstract.php on line 213
The Culprit Codeblock is some wonky indented array operation:
$params = array_merge(
parent::getAuthorizationParameters($options),
array_filter([
'hd' => $this->hostedDomain,
'access_type' => $this->accessType,
'scope' => $this->scope, // this is indeted by two tabs instead of spaces like the surroundig lines
// if the user is logged in with more than one account ask which one to use for the login!
'authuser' => '-1'
])
);
Got this result when setting up a guard in the setIndentLevel to set indent level to 0 should it be smaller than that, doing two transformations in that block:
$params = Compat::array_merge(parent::getAuthorizationParameters($options), Compat::array_filter([
'hd' => $this->hostedDomain,
'access_type' => $this->accessType,
'scope' => $this->scope, // still indented by two tabs
// if the user is logged in with more than one account ask which one to use for the login!
'authuser' => '-1'
]));
A mitigation to set the indent level to 0 in that case could suffice, I did not dig deeper into what causes the level param to go below zero. Let me know what you think and if I can help out by submitting a PR.