Page MenuHomePhabricator

ord(): Providing a string that is not one byte long is deprecated. Use ord($str[0]) instead (from css-sanitizer/src/Parser/DataSourceTokenizer.php:574)
Closed, ResolvedPublic

Description

  • mediawiki/core locally running PHP 8.5
  • composer phpunit:entrypoint -- --filter UploadVerificationTest::testCheckSvgScriptCallback#70
1) UploadVerificationTest::testCheckSvgScriptCallback with data set #70 ('<svg xmlns="http://www.w3.org...</svg>', true, true, 'escaping comment full-width (T85085)')
ord(): Providing a string that is not one byte long is deprecated. Use ord($str[0]) instead

/[...]/mediawiki/core/vendor/wikimedia/css-sanitizer/src/Parser/DataSourceTokenizer.php:574
/[...]/mediawiki/core/vendor/wikimedia/css-sanitizer/src/Parser/DataSourceTokenizer.php:336
/[...]/mediawiki/core/vendor/wikimedia/css-sanitizer/src/Parser/Parser.php:116
/[...]/mediawiki/core/vendor/wikimedia/css-sanitizer/src/Parser/Parser.php:253
/[...]/mediawiki/core/includes/Upload/SVGCSSChecker.php:51
/[...]/mediawiki/core/includes/Upload/UploadVerification.php:820
/[...]/mediawiki/core/vendor/wikimedia/testing-access-wrapper/src/TestingAccessWrapper.php:100
/[...]/mediawiki/core/includes/libs/Mime/XmlTypeCheck.php:334
/[...]/mediawiki/core/includes/libs/Mime/XmlTypeCheck.php:234
/[...]/mediawiki/core/includes/libs/Mime/XmlTypeCheck.php:178
/[...]/mediawiki/core/includes/libs/Mime/XmlTypeCheck.php:109
/[...]/mediawiki/core/tests/phpunit/includes/Upload/UploadVerificationTest.php:966
/[...]/mediawiki/core/tests/phpunit/includes/Upload/UploadVerificationTest.php:76

(note: not yet seen in WMF experimental CI due to the order in which it runs MediaWiki's PHPUnit tests, but it presumably would be seen there at some point)

Details

Event Timeline

A full-width slash is used in that test and passed to ord(), which expect only single-bytes characters.

css sanitizer expect valid utf-8, but seems not working well with multibyte character

Change #1227934 had a related patch set uploaded (by Umherirrender; author: Umherirrender):

[css-sanitizer@master] Pass first byte to ord() in DataSourceTokenizer

https://gerrit.wikimedia.org/r/1227934

A full-width slash is used in that test and passed to ord(), which expect only single-bytes characters.

css sanitizer expect valid utf-8, but seems not working well with multibyte character

It seems I was wrong, according to code comments the function can be used with multibyte utf8 character and the code expect that ord() only works with the first given byte as it checks ascii only, but that now changed in php and is fixed with the given patch set.

Change #1227934 merged by jenkins-bot:

[css-sanitizer@master] Pass first byte to ord() in DataSourceTokenizer

https://gerrit.wikimedia.org/r/1227934