Page MenuHomePhabricator

Phan crashes on css-sanitizer on PHP 8.1
Open, Needs TriagePublic

Description

> phan -d . -p --allow-polyfill-parser
~/code/mediawiki-libs-css-sanitizer/vendor/mediawiki/phan-taint-check-plugin/src/Taintedness.php:472 [8192] Implicit conversion from float 1.2 to int loses precision
(Phan 5.2.0 crashed when parsing/analyzing 'tests/Objects/CSSObjectListTest.php')
More details:
#2: SecurityCheckPlugin\Taintedness->getTaintednessForOffsetOrWhole() called at [~/code/mediawiki-libs-css-sanitizer/vendor/mediawiki/phan-taint-check-plugin/src/TaintednessVisitor.php:703] Args: [1.2]
#3: SecurityCheckPlugin\TaintednessVisitor->visitDim() called at [~/code/mediawiki-libs-css-sanitizer/vendor/phan/phan/src/Phan/Plugin/ConfigPluginSet.php:1297] Args: [ast\Node({"kind":512,"flags":0,"lineno":290,"children":{"expr":{"kind":256,"flags":0,"lineno":290,"children":{"name":"list"},"taint":{}},"dim":1.2}})]
#4: SecurityCheckPlugin\MWVisitor::Phan\Plugin\{closure}() called at [~/code/mediawiki-libs-css-sanitizer/vendor/phan/phan/src/Phan/Plugin/ConfigPluginSet.php:323] Args: [Phan\CodeBase({}), Phan\Language\Context(tests/Objects/CSSObjectListTest.php:290), ast\Node({"kind":512,"flags":0,"lineno":290,"children":{"expr":{"kind":256,"flags":0,"lineno":290,"children":{"name":"list"},"taint":{}},"dim":1.2}}), [ast\Node({"kind":132,"flags":0,"lineno":1,"children":[{"kind":542,"flags":0,"lineno":7,"children":{"name":"Wikimedia\\CSS\\Objects","stmts":null}},{"kind":143,"flags":1,"lineno":9,"children":[{"kind":543,"flags":0,"lineno":9,"children":{"name":"InvalidArgumentException","alias":null}}]},{"kind":143,"flags":1,"lineno":10,"children":[{"kind":543,"flags":0,"lineno":10,"children":{"name":"OutOfBoundsException","alias":null}}]},{"kind":143,"flags":1,"lineno":11,"children":[{"kind":543,"flags":0,"lineno":11,"children":{"name":"PHPUnit\\Framework\\TestCase","alias":null}}]},{"ki...
#5: Phan\Plugin\ConfigPluginSet->postAnalyzeNode() called at [~/code/mediawiki-libs-css-sanitizer/vendor/phan/phan/src/Phan/BlockAnalysisVisitor.php:3216] Args: [Phan\CodeBase({}), Phan\Language\Context(tests/Objects/CSSObjectListTest.php:290), ast\Node({"kind":512,"flags":0,"lineno":290,"children":{"expr":{"kind":256,"flags":0,"lineno":290,"children":{"name":"list"},"taint":{}},"dim":1.2}}), [ast\Node({"kind":132,"flags":0,"lineno":1,"children":[{"kind":542,"flags":0,"lineno":7,"children":{"name":"Wikimedia\\CSS\\Objects","stmts":null}},{"kind":143,"flags":1,"lineno":9,"children":[{"kind":543,"flags":0,"lineno":9,"children":{"name":"InvalidArgumentException","alias":null}}]},{"kind":143,"flags":1,"lineno":10,"children":[{"kind":543,"flags":0,"lineno":10,"children":{"name":"OutOfBoundsException","alias":null}}]},{"kind":143,"flags":1,"lineno":11,"children":[{"kind":543,"flags":0,"lineno":11,"children":{"name":"PHPUnit\\Framework\\TestCase","alias":null}}]},{"kind":143,"...
#6: Phan\BlockAnalysisVisitor->postOrderAnalyze() called at [~/code/mediawiki-libs-css-sanitizer/vendor/phan/phan/src/Phan/BlockAnalysisVisitor.php:600] Args: [Phan\Language\Context(tests/Objects/CSSObjectListTest.php:290), ast\Node({"kind":512,"flags":0,"lineno":290,"children":{"expr":{"kind":256,"flags":0,"lineno":290,"children":{"name":"list"},"taint":{}},"dim":1.2}})]
#7: Phan\BlockAnalysisVisitor->visit() called at [~/code/mediawiki-libs-css-sanitizer/vendor/phan/phan/src/Phan/AST/Visitor/KindVisitorImplementation.php:191] Args: [ast\Node({"kind":512,"flags":0,"lineno":290,"children":{"expr":{"kind":256,"flags":0,"lineno":290,"children":{"name":"list"},"taint":{}},"dim":1.2}})]
#8: Phan\AST\Visitor\KindVisitorImplementation->visitDim() called at [~/code/mediawiki-libs-css-sanitizer/vendor/phan/phan/src/Phan/BlockAnalysisVisitor.php:628] Args: [ast\Node({"kind":512,"flags":0,"lineno":290,"children":{"expr":{"kind":256,"flags":0,"lineno":290,"children":{"name":"list"},"taint":{}},"dim":1.2}})]
#9: Phan\BlockAnalysisVisitor->analyzeAndGetUpdatedContext() called at [~/code/mediawiki-libs-css-sanitizer/vendor/phan/phan/src/Phan/BlockAnalysisVisitor.php:597] Args: [Phan\Language\Context(tests/Objects/CSSObjectListTest.php:290), ast\Node({"kind":518,"flags":0,"lineno":290,"children":{"var":{"kind":256,"flags":1879048192,"lineno":290,"children":{"name":"dummy"},"taint":{}},"expr":{"kind":512,"flags":0,"lineno":290,"children":{"expr":{"kind":256,"flags":0,"lineno":290,"children":{"name":"list"},"taint":{}},"dim":1.2}}}}), ast\Node({"kind":512,"flags":0,"lineno":290,"children":{"expr":{"kind":256,"flags":0,"lineno":290,"children":{"name":"list"},"taint":{}},"dim":1.2}})]
#10: Phan\BlockAnalysisVisitor->visit() called at [~/code/mediawiki-libs-css-sanitizer/vendor/phan/phan/src/Phan/AST/Visitor/KindVisitorImplementation.php:70] Args: [ast\Node({"kind":518,"flags":0,"lineno":290,"children":{"var":{"kind":256,"flags":1879048192,"lineno":290,"children":{"name":"dummy"},"taint":{}},"expr":{"kind":512,"flags":0,"lineno":290,"children":{"expr":{"kind":256,"flags":0,"lineno":290,"children":{"name":"list"},"taint":{}},"dim":1.2}}}})]
#11: Phan\AST\Visitor\KindVisitorImplementation->visitAssign() called at [~/code/mediawiki-libs-css-sanitizer/vendor/phan/phan/src/Phan/BlockAnalysisVisitor.php:628] Args: [ast\Node({"kind":518,"flags":0,"lineno":290,"children":{"var":{"kind":256,"flags":1879048192,"lineno":290,"children":{"name":"dummy"},"taint":{}},"expr":{"kind":512,"flags":0,"lineno":290,"children":{"expr":{"kind":256,"flags":0,"lineno":290,"children":{"name":"list"},"taint":{}},"dim":1.2}}}})]
#12: Phan\BlockAnalysisVisitor->analyzeAndGetUpdatedContext() called at [~/code/mediawiki-libs-css-sanitizer/vendor/phan/phan/src/Phan/BlockAnalysisVisitor.php:240] Args: [Phan\Language\Context(tests/Objects/CSSObjectListTest.php:290), ast\Node({"kind":132,"flags":0,"lineno":289,"children":[{"kind":518,"flags":0,"lineno":290,"children":{"var":{"kind":256,"flags":1879048192,"lineno":290,"children":{"name":"dummy"},"taint":{}},"expr":{"kind":512,"flags":0,"lineno":290,"children":{"expr":{"kind":256,"flags":0,"lineno":290,"children":{"name":"list"},"taint":{}},"dim":1.2}}}},{"kind":768,"flags":0,"lineno":291,"children":{"expr":{"kind":256,"flags":0,"lineno":291,"children":{"name":"this"}},"method":"fail","args":{"kind":128,"flags":0,"lineno":291,"children":["Expected exception not thrown"]}}}]}), ast\Node({"kind":518,"flags":0,"lineno":290,"children":{"var":{"kind":256,"flags":1879048192,"lineno":290,"children":{"name":"dummy"},"taint":{}},"expr":{"kind":512,"flags":0,"line...
#13: Phan\BlockAnalysisVisitor->visitStmtList() called at [~/code/mediawiki-libs-css-sanitizer/vendor/phan/phan/src/Phan/BlockAnalysisVisitor.php:628] Args: [ast\Node({"kind":132,"flags":0,"lineno":289,"children":[{"kind":518,"flags":0,"lineno":290,"children":{"var":{"kind":256,"flags":1879048192,"lineno":290,"children":{"name":"dummy"},"taint":{}},"expr":{"kind":512,"flags":0,"lineno":290,"children":{"expr":{"kind":256,"flags":0,"lineno":290,"children":{"name":"list"},"taint":{}},"dim":1.2}}}},{"kind":768,"flags":0,"lineno":291,"children":{"expr":{"kind":256,"flags":0,"lineno":291,"children":{"name":"this"}},"method":"fail","args":{"kind":128,"flags":0,"lineno":291,"children":["Expected exception not thrown"]}}}]})]
#14: Phan\BlockAnalysisVisitor->analyzeAndGetUpdatedContext() called at [~/code/mediawiki-libs-css-sanitizer/vendor/phan/phan/src/Phan/BlockAnalysisVisitor.php:2498] Args: [Phan\Language\Context(tests/Objects/CSSObjectListTest.php:290), ast\Node({"kind":772,"flags":0,"lineno":289,"children":{"try":{"kind":132,"flags":0,"lineno":289,"children":[{"kind":518,"flags":0,"lineno":290,"children":{"var":{"kind":256,"flags":1879048192,"lineno":290,"children":{"name":"dummy"},"taint":{}},"expr":{"kind":512,"flags":0,"lineno":290,"children":{"expr":{"kind":256,"flags":0,"lineno":290,"children":{"name":"list"},"taint":{}},"dim":1.2}}}},{"kind":768,"flags":0,"lineno":291,"children":{"expr":{"kind":256,"flags":0,"lineno":291,"children":{"name":"this"}},"method":"fail","args":{"kind":128,"flags":0,"lineno":291,"children":["Expected exception not thrown"]}}}]},"catches":{"kind":135,"flags":0,"lineno":292,"children":[{"kind":773,"flags":0,"lineno":292,"children":{"class":{"kind":141,"fla...
#15: Phan\BlockAnalysisVisitor->visitTry() called at [~/code/mediawiki-libs-css-sanitizer/vendor/phan/phan/src/Phan/BlockAnalysisVisitor.php:628] Args: [ast\Node({"kind":772,"flags":0,"lineno":289,"children":{"try":{"kind":132,"flags":0,"lineno":289,"children":[{"kind":518,"flags":0,"lineno":290,"children":{"var":{"kind":256,"flags":1879048192,"lineno":290,"children":{"name":"dummy"},"taint":{}},"expr":{"kind":512,"flags":0,"lineno":290,"children":{"expr":{"kind":256,"flags":0,"lineno":290,"children":{"name":"list"},"taint":{}},"dim":1.2}}}},{"kind":768,"flags":0,"lineno":291,"children":{"expr":{"kind":256,"flags":0,"lineno":291,"children":{"name":"this"}},"method":"fail","args":{"kind":128,"flags":0,"lineno":291,"children":["Expected exception not thrown"]}}}]},"catches":{"kind":135,"flags":0,"lineno":292,"children":[{"kind":773,"flags":0,"lineno":292,"children":{"class":{"kind":141,"flags":0,"lineno":292,"children":[{"kind":2048,"flags":1,"lineno":292,"children":{"name...
#16: Phan\BlockAnalysisVisitor->analyzeAndGetUpdatedContext() called at [~/code/mediawiki-libs-css-sanitizer/vendor/phan/phan/src/Phan/BlockAnalysisVisitor.php:240] Args: [Phan\Language\Context(tests/Objects/CSSObjectListTest.php:289), ast\Node({"kind":132,"flags":0,"lineno":251,"children":[{"kind":518,"flags":0,"lineno":252,"children":{"var":{"kind":256,"flags":1879048192,"lineno":252,"children":{"name":"value1"},"taint":{},"hash":null},"expr":{"kind":527,"flags":0,"lineno":252,"children":{"class":{"kind":2048,"flags":1,"lineno":252,"children":{"name":"TestCSSObjectListItem"},"hash":null},"args":{"kind":128,"flags":0,"lineno":252,"children":[1],"hash":null}},"taint":{},"hash":null}},"taint":{}},{"kind":518,"flags":0,"lineno":253,"children":{"var":{"kind":256,"flags":1879048192,"lineno":253,"children":{"name":"value2"},"taint":{},"hash":null},"expr":{"kind":527,"flags":0,"lineno":253,"children":{"class":{"kind":2048,"flags":1,"lineno":253,"children":{"name":"TestCSSObjec...
#17: Phan\BlockAnalysisVisitor->visitStmtList() called at [~/code/mediawiki-libs-css-sanitizer/vendor/phan/phan/src/Phan/BlockAnalysisVisitor.php:628] Args: [ast\Node({"kind":132,"flags":0,"lineno":251,"children":[{"kind":518,"flags":0,"lineno":252,"children":{"var":{"kind":256,"flags":1879048192,"lineno":252,"children":{"name":"value1"},"taint":{},"hash":null},"expr":{"kind":527,"flags":0,"lineno":252,"children":{"class":{"kind":2048,"flags":1,"lineno":252,"children":{"name":"TestCSSObjectListItem"},"hash":null},"args":{"kind":128,"flags":0,"lineno":252,"children":[1],"hash":null}},"taint":{},"hash":null}},"taint":{}},{"kind":518,"flags":0,"lineno":253,"children":{"var":{"kind":256,"flags":1879048192,"lineno":253,"children":{"name":"value2"},"taint":{},"hash":null},"expr":{"kind":527,"flags":0,"lineno":253,"children":{"class":{"kind":2048,"flags":1,"lineno":253,"children":{"name":"TestCSSObjectListItem"},"hash":null},"args":{"kind":128,"flags":0,"lineno":253,"children":...
#18: Phan\BlockAnalysisVisitor->analyzeAndGetUpdatedContext() called at [~/code/mediawiki-libs-css-sanitizer/vendor/phan/phan/src/Phan/BlockAnalysisVisitor.php:3097] Args: [Phan\Language\Context(tests/Objects/CSSObjectListTest.php:271), ast\Node({"kind":69,"flags":1,"lineno":251,"children":{"name":"testArrayAccess","docComment":null,"params":{"kind":136,"flags":0,"lineno":251,"children":[]},"stmts":{"kind":132,"flags":0,"lineno":251,"children":[{"kind":518,"flags":0,"lineno":252,"children":{"var":{"kind":256,"flags":1879048192,"lineno":252,"children":{"name":"value1"},"taint":{},"hash":null},"expr":{"kind":527,"flags":0,"lineno":252,"children":{"class":{"kind":2048,"flags":1,"lineno":252,"children":{"name":"TestCSSObjectListItem"},"hash":null},"args":{"kind":128,"flags":0,"lineno":252,"children":[1],"hash":null}},"taint":{},"hash":null}},"taint":{}},{"kind":518,"flags":0,"lineno":253,"children":{"var":{"kind":256,"flags":1879048192,"lineno":253,"children":{"name":"value2...
#19: Phan\BlockAnalysisVisitor->visitMethod() called at [~/code/mediawiki-libs-css-sanitizer/vendor/phan/phan/src/Phan/BlockAnalysisVisitor.php:628] Args: [ast\Node({"kind":69,"flags":1,"lineno":251,"children":{"name":"testArrayAccess","docComment":null,"params":{"kind":136,"flags":0,"lineno":251,"children":[]},"stmts":{"kind":132,"flags":0,"lineno":251,"children":[{"kind":518,"flags":0,"lineno":252,"children":{"var":{"kind":256,"flags":1879048192,"lineno":252,"children":{"name":"value1"},"taint":{},"hash":null},"expr":{"kind":527,"flags":0,"lineno":252,"children":{"class":{"kind":2048,"flags":1,"lineno":252,"children":{"name":"TestCSSObjectListItem"},"hash":null},"args":{"kind":128,"flags":0,"lineno":252,"children":[1],"hash":null}},"taint":{},"hash":null}},"taint":{}},{"kind":518,"flags":0,"lineno":253,"children":{"var":{"kind":256,"flags":1879048192,"lineno":253,"children":{"name":"value2"},"taint":{},"hash":null},"expr":{"kind":527,"flags":0,"lineno":253,"children":{...
#20: Phan\BlockAnalysisVisitor->analyzeAndGetUpdatedContext() called at [~/code/mediawiki-libs-css-sanitizer/vendor/phan/phan/src/Phan/BlockAnalysisVisitor.php:240] Args: [Phan\Language\Context(tests/Objects/CSSObjectListTest.php:251), ast\Node({"kind":132,"flags":0,"lineno":17,"children":[{"kind":69,"flags":1,"lineno":19,"children":{"name":"testException","docComment":null,"params":{"kind":136,"flags":0,"lineno":19,"children":[]},"stmts":{"kind":132,"flags":0,"lineno":19,"children":[{"kind":518,"flags":0,"lineno":20,"children":{"var":{"kind":256,"flags":1879048192,"lineno":20,"children":{"name":"item"},"taint":{},"hash":null},"expr":{"kind":527,"flags":0,"lineno":20,"children":{"class":{"kind":2048,"flags":1,"lineno":20,"children":{"name":"TestCSSObjectListItem"},"hash":null},"args":{"kind":128,"flags":0,"lineno":20,"children":[1],"hash":null}},"taint":{},"hash":null}},"taint":{},"hash":null},{"kind":768,"flags":0,"lineno":21,"children":{"expr":{"kind":256,"flags":0,"li...
#21: Phan\BlockAnalysisVisitor->visitStmtList() called at [~/code/mediawiki-libs-css-sanitizer/vendor/phan/phan/src/Phan/BlockAnalysisVisitor.php:628] Args: [ast\Node({"kind":132,"flags":0,"lineno":17,"children":[{"kind":69,"flags":1,"lineno":19,"children":{"name":"testException","docComment":null,"params":{"kind":136,"flags":0,"lineno":19,"children":[]},"stmts":{"kind":132,"flags":0,"lineno":19,"children":[{"kind":518,"flags":0,"lineno":20,"children":{"var":{"kind":256,"flags":1879048192,"lineno":20,"children":{"name":"item"},"taint":{},"hash":null},"expr":{"kind":527,"flags":0,"lineno":20,"children":{"class":{"kind":2048,"flags":1,"lineno":20,"children":{"name":"TestCSSObjectListItem"},"hash":null},"args":{"kind":128,"flags":0,"lineno":20,"children":[1],"hash":null}},"taint":{},"hash":null}},"taint":{},"hash":null},{"kind":768,"flags":0,"lineno":21,"children":{"expr":{"kind":256,"flags":0,"lineno":21,"children":{"name":"this"},"taint":{},"hash":null},"method":"expectEx...
#22: Phan\BlockAnalysisVisitor->analyzeAndGetUpdatedContext() called at [~/code/mediawiki-libs-css-sanitizer/vendor/phan/phan/src/Phan/BlockAnalysisVisitor.php:1537] Args: [Phan\Language\Context(tests/Objects/CSSObjectListTest.php:251), ast\Node({"kind":70,"flags":0,"lineno":17,"children":{"name":"CSSObjectListTest","docComment":"/**\n * @covers \\Wikimedia\\CSS\\Objects\\CSSObjectList\n */","extends":{"kind":2048,"flags":1,"lineno":17,"children":{"name":"TestCase"}},"implements":null,"stmts":{"kind":132,"flags":0,"lineno":17,"children":[{"kind":69,"flags":1,"lineno":19,"children":{"name":"testException","docComment":null,"params":{"kind":136,"flags":0,"lineno":19,"children":[]},"stmts":{"kind":132,"flags":0,"lineno":19,"children":[{"kind":518,"flags":0,"lineno":20,"children":{"var":{"kind":256,"flags":1879048192,"lineno":20,"children":{"name":"item"},"taint":{},"hash":null},"expr":{"kind":527,"flags":0,"lineno":20,"children":{"class":{"kind":2048,"flags":1,"lineno":20,"...
#23: Phan\BlockAnalysisVisitor->visitClosedContext() called at [~/code/mediawiki-libs-css-sanitizer/vendor/phan/phan/src/Phan/BlockAnalysisVisitor.php:3065] Args: [ast\Node({"kind":70,"flags":0,"lineno":17,"children":{"name":"CSSObjectListTest","docComment":"/**\n * @covers \\Wikimedia\\CSS\\Objects\\CSSObjectList\n */","extends":{"kind":2048,"flags":1,"lineno":17,"children":{"name":"TestCase"}},"implements":null,"stmts":{"kind":132,"flags":0,"lineno":17,"children":[{"kind":69,"flags":1,"lineno":19,"children":{"name":"testException","docComment":null,"params":{"kind":136,"flags":0,"lineno":19,"children":[]},"stmts":{"kind":132,"flags":0,"lineno":19,"children":[{"kind":518,"flags":0,"lineno":20,"children":{"var":{"kind":256,"flags":1879048192,"lineno":20,"children":{"name":"item"},"taint":{},"hash":null},"expr":{"kind":527,"flags":0,"lineno":20,"children":{"class":{"kind":2048,"flags":1,"lineno":20,"children":{"name":"TestCSSObjectListItem"},"hash":null},"args":{"kind":12...
#24: Phan\BlockAnalysisVisitor->visitClass() called at [~/code/mediawiki-libs-css-sanitizer/vendor/phan/phan/src/Phan/BlockAnalysisVisitor.php:628] Args: [ast\Node({"kind":70,"flags":0,"lineno":17,"children":{"name":"CSSObjectListTest","docComment":"/**\n * @covers \\Wikimedia\\CSS\\Objects\\CSSObjectList\n */","extends":{"kind":2048,"flags":1,"lineno":17,"children":{"name":"TestCase"}},"implements":null,"stmts":{"kind":132,"flags":0,"lineno":17,"children":[{"kind":69,"flags":1,"lineno":19,"children":{"name":"testException","docComment":null,"params":{"kind":136,"flags":0,"lineno":19,"children":[]},"stmts":{"kind":132,"flags":0,"lineno":19,"children":[{"kind":518,"flags":0,"lineno":20,"children":{"var":{"kind":256,"flags":1879048192,"lineno":20,"children":{"name":"item"},"taint":{},"hash":null},"expr":{"kind":527,"flags":0,"lineno":20,"children":{"class":{"kind":2048,"flags":1,"lineno":20,"children":{"name":"TestCSSObjectListItem"},"hash":null},"args":{"kind":128,"flags"...
#25: Phan\BlockAnalysisVisitor->analyzeAndGetUpdatedContext() called at [~/code/mediawiki-libs-css-sanitizer/vendor/phan/phan/src/Phan/BlockAnalysisVisitor.php:240] Args: [Phan\Language\Context(tests/Objects/CSSObjectListTest.php:17), ast\Node({"kind":132,"flags":0,"lineno":1,"children":[{"kind":542,"flags":0,"lineno":7,"children":{"name":"Wikimedia\\CSS\\Objects","stmts":null}},{"kind":143,"flags":1,"lineno":9,"children":[{"kind":543,"flags":0,"lineno":9,"children":{"name":"InvalidArgumentException","alias":null}}]},{"kind":143,"flags":1,"lineno":10,"children":[{"kind":543,"flags":0,"lineno":10,"children":{"name":"OutOfBoundsException","alias":null}}]},{"kind":143,"flags":1,"lineno":11,"children":[{"kind":543,"flags":0,"lineno":11,"children":{"name":"PHPUnit\\Framework\\TestCase","alias":null}}]},{"kind":143,"flags":1,"lineno":12,"children":[{"kind":543,"flags":0,"lineno":12,"children":{"name":"Wikimedia\\CSS\\Util","alias":null}}]},{"kind":70,"flags":0,"lineno":17,"chi...
#26: Phan\BlockAnalysisVisitor->visitStmtList() called at [~/code/mediawiki-libs-css-sanitizer/vendor/phan/phan/src/Phan/AST/Visitor/KindVisitorImplementation.php:35] Args: [ast\Node({"kind":132,"flags":0,"lineno":1,"children":[{"kind":542,"flags":0,"lineno":7,"children":{"name":"Wikimedia\\CSS\\Objects","stmts":null}},{"kind":143,"flags":1,"lineno":9,"children":[{"kind":543,"flags":0,"lineno":9,"children":{"name":"InvalidArgumentException","alias":null}}]},{"kind":143,"flags":1,"lineno":10,"children":[{"kind":543,"flags":0,"lineno":10,"children":{"name":"OutOfBoundsException","alias":null}}]},{"kind":143,"flags":1,"lineno":11,"children":[{"kind":543,"flags":0,"lineno":11,"children":{"name":"PHPUnit\\Framework\\TestCase","alias":null}}]},{"kind":143,"flags":1,"lineno":12,"children":[{"kind":543,"flags":0,"lineno":12,"children":{"name":"Wikimedia\\CSS\\Util","alias":null}}]},{"kind":70,"flags":0,"lineno":17,"children":{"name":"CSSObjectListTest","docComment":"/**\n * @cov...
#27: Phan\AST\Visitor\KindVisitorImplementation->__invoke() called at [~/code/mediawiki-libs-css-sanitizer/vendor/phan/phan/src/Phan/Analysis.php:578] Args: [ast\Node({"kind":132,"flags":0,"lineno":1,"children":[{"kind":542,"flags":0,"lineno":7,"children":{"name":"Wikimedia\\CSS\\Objects","stmts":null}},{"kind":143,"flags":1,"lineno":9,"children":[{"kind":543,"flags":0,"lineno":9,"children":{"name":"InvalidArgumentException","alias":null}}]},{"kind":143,"flags":1,"lineno":10,"children":[{"kind":543,"flags":0,"lineno":10,"children":{"name":"OutOfBoundsException","alias":null}}]},{"kind":143,"flags":1,"lineno":11,"children":[{"kind":543,"flags":0,"lineno":11,"children":{"name":"PHPUnit\\Framework\\TestCase","alias":null}}]},{"kind":143,"flags":1,"lineno":12,"children":[{"kind":543,"flags":0,"lineno":12,"children":{"name":"Wikimedia\\CSS\\Util","alias":null}}]},{"kind":70,"flags":0,"lineno":17,"children":{"name":"CSSObjectListTest","docComment":"/**\n * @covers \\Wikimedia\...
#28: Phan\Analysis::analyzeFile() called at [~/code/mediawiki-libs-css-sanitizer/vendor/phan/phan/src/Phan/Phan.php:535] Args: [Phan\CodeBase({}), "tests/Objects/CSSObjectListTest.php", null, null]
#29: Phan\Phan::Phan\{closure}() called at [~/code/mediawiki-libs-css-sanitizer/vendor/phan/phan/src/Phan/Phan.php:592] Args: [69, "tests/Objects/CSSObjectListTest.php", 121]
#30: Phan\Phan::finishAnalyzingRemainingStatements() called at [~/code/mediawiki-libs-css-sanitizer/vendor/phan/phan/src/Phan/Phan.php:384] Args: [Phan\CodeBase({}), null, ["src/Grammar/Matcher.php", "src/Grammar/Alternative.php", "src/Grammar/AnythingMatcher.php", "src/Grammar/BlockMatcher.php", "src/Grammar/CheckedMatcher.php", "src/Grammar/DelimMatcher.php", "src/Grammar/FunctionMatcher.php", "src/Grammar/Juxtaposition.php", "src/Grammar/KeywordMatcher.php", "src/Grammar/NoWhitespace.php", ... 111 more element(s)], []]
#31: Phan\Phan::analyzeFileList() called at [~/code/mediawiki-libs-css-sanitizer/vendor/phan/phan/src/phan.php:38] Args: [Phan\CodeBase({}), Closure]
#32: require_once() called at [~/code/mediawiki-libs-css-sanitizer/vendor/phan/phan/phan:10] Args: ["~/code/mediawiki-libs-css-sanitizer/vendor/phan/phan/src/phan.php"]
#33: include() called at [~/code/mediawiki-libs-css-sanitizer/vendor/bin/phan:120] Args: ["~/code/mediawiki-libs-css-sanitizer/vendor/phan/phan/phan"]

Happens on mediawiki-phan-config 0.12.0 and 0.11.1, so was not fixed by T311452: Taint Check Plugin release as previously suspected.

Event Timeline

While testing with the above example I have found also an issue upstream - https://github.com/phan/phan/issues/4749

According to a fresh run on css-sanitizer for php8.1 that is also the current failure

https://integration.wikimedia.org/ci/job/composer-package-php81-docker/1678/console

/src/vendor/phan/phan/src/Phan/Analysis/AssignmentVisitor.php:881 [8192] Implicit conversion from float 1.2 to int loses precision
 (Phan 5.4.1 crashed when parsing/analyzing 'tests/Objects/CSSObjectListTest.php')
 More details:
 #2: Phan\Analysis\AssignmentVisitor->visitDim() called at [/src/vendor/phan/phan/src/Phan/AST/Visitor/KindVisitorImplementation.php:35] Args: [ast\Node({"kind":512,"flags":1879048192,"lineno":321,"children":{"expr":{"kind":256,"flags":1610612736,"lineno":321,"children":{"name":"list"},"taint":{}},"dim":1.2},"taint":{}})]
 #3: Phan\AST\Visitor\KindVisitorImplementation->__invoke() called at [/src/vendor/phan/phan/src/Phan/Analysis/PostOrderAnalysisVisitor.php:174] Args:

Needs to wait for upstream fix and release.

Reedy moved this task from Backlog to Reported Upstream on the Upstream board.

I assume that the upstream issue is https://github.com/phan/phan/issues/4749 and not a different one? (There's not been an upstream release since the 5.4.1 one we're currently using.)

Or just fix the taint-check bug that won't actually be fixed by the upstream patch (if Taintedness behaved correctly, it didn't trigger an implicit conversion since that's not a thing for ArrayAccess objects) and then the phan bug about array indexes won't be relevant here.