VOOZH about

URL: https://phabricator.wikimedia.org/T425782

⇱ ⚓ T425782 [Core][BUG] Need to set language before accessing


Maniphest T425782

[Core][BUG] Need to set language before accessing
Closed, ResolvedPublicBUG REPORT

Description

When opening this page, it triggers an error .. it is possible to be affected by the patch Remove MediaHandler language fallback

Steps to replicate the issue (include links if applicable):

Stacktrace:

[c37a7341-bcaf-4229-8615-570072034a35] /w/index.php?mobileaction=toggle_view_mobile&title=Q424242 RuntimeException: Need to set language before accessing.

Backtrace:
from /srv/mediawiki/php-master/includes/Media/MediaHandler.php(64)
#0 /srv/mediawiki/php-master/includes/Media/ImageHandler.php(350): MediaWiki\Media\MediaHandler->getLanguage()
#1 /srv/mediawiki/php-master/includes/FileRepo/File/File.php(2490): MediaWiki\Media\ImageHandler->getDimensionsString(MediaWiki\FileRepo\File\ForeignAPIFile)
#2 /srv/mediawiki/php-master/extensions/Wikibase/lib/includes/Formatters/CommonsInlineImageFormatter.php(171): MediaWiki\FileRepo\File\File->getDimensionsString(MediaWiki\Languages\LanguageEn)
#3 /srv/mediawiki/php-master/extensions/Wikibase/lib/includes/Formatters/CommonsInlineImageFormatter.php(155): Wikibase\Lib\Formatters\CommonsInlineImageFormatter->getFileMetaHtml(MediaWiki\FileRepo\File\ForeignAPIFile)
#4 /srv/mediawiki/php-master/extensions/Wikibase/lib/includes/Formatters/CommonsInlineImageFormatter.php(118): Wikibase\Lib\Formatters\CommonsInlineImageFormatter->getCaptionHtml(MediaWiki\Title\Title, MediaWiki\FileRepo\File\ForeignAPIFile)
#5 /srv/mediawiki/php-master/extensions/Wikibase/lib/includes/Formatters/DispatchingValueFormatter.php(72): Wikibase\Lib\Formatters\CommonsInlineImageFormatter->format(DataValues\StringValue)
#6 /srv/mediawiki/php-master/extensions/Wikibase/lib/includes/Formatters/PropertyValueSnakFormatter.php(148): Wikibase\Lib\Formatters\DispatchingValueFormatter->formatValue(DataValues\StringValue, string)
#7 /srv/mediawiki/php-master/extensions/Wikibase/lib/includes/Formatters/PropertyValueSnakFormatter.php(117): Wikibase\Lib\Formatters\PropertyValueSnakFormatter->formatValue(DataValues\StringValue, string)
#8 /srv/mediawiki/php-master/extensions/Wikibase/lib/includes/Formatters/DispatchingSnakFormatter.php(150): Wikibase\Lib\Formatters\PropertyValueSnakFormatter->formatSnak(Wikibase\DataModel\Snak\PropertyValueSnak)
#9 /srv/mediawiki/php-master/extensions/Wikibase/lib/includes/Formatters/ErrorHandlingSnakFormatter.php(65): Wikibase\Lib\Formatters\DispatchingSnakFormatter->formatSnak(Wikibase\DataModel\Snak\PropertyValueSnak)
#10 /srv/mediawiki/php-master/extensions/Wikibase/view/src/VueNoScriptRendering.php(271): Wikibase\Lib\Formatters\ErrorHandlingSnakFormatter->formatSnak(Wikibase\DataModel\Snak\PropertyValueSnak)
#11 /srv/mediawiki/php-master/extensions/Wikibase/view/src/VueNoScriptRendering.php(320): Wikibase\View\VueNoScriptRendering->populateReferenceSnakValueHtml(Wikibase\DataModel\Statement\Statement, array)
#12 /srv/mediawiki/php-master/extensions/Wikibase/view/src/StatementSectionsView.php(80): Wikibase\View\VueNoScriptRendering->renderStatementsSectionHtml(string, string, string, Wikibase\DataModel\Statement\StatementList)
#13 /srv/mediawiki/php-master/extensions/Wikibase/view/src/StatementSectionsView.php(99): Wikibase\View\StatementSectionsView->getVueStatementSectionsHtml(Wikibase\DataModel\Statement\StatementList, array, string)
#14 /srv/mediawiki/php-master/extensions/Wikibase/view/src/StatementSectionsView.php(138): Wikibase\View\StatementSectionsView->getVueStatementsHtml(Wikibase\DataModel\Entity\ItemId, Wikibase\DataModel\Statement\StatementList, array)
#15 /srv/mediawiki/php-master/extensions/Wikibase/view/src/ItemView.php(125): Wikibase\View\StatementSectionsView->getHtml(Wikibase\DataModel\Statement\StatementList, Wikibase\DataModel\Entity\ItemId, bool)
#16 /srv/mediawiki/php-master/extensions/Wikibase/view/src/EntityView.php(68): Wikibase\View\ItemView->getMainHtml(Wikibase\DataModel\Entity\Item)
#17 /srv/mediawiki/php-master/extensions/Wikibase/view/src/ItemView.php(105): Wikibase\View\EntityView->renderEntityView(Wikibase\DataModel\Entity\Item)
#18 /srv/mediawiki/php-master/extensions/Wikibase/repo/includes/ParserOutput/FullEntityParserOutputGenerator.php(170): Wikibase\View\ItemView->getContent(Wikibase\DataModel\Entity\Item, int)
#19 /srv/mediawiki/php-master/extensions/Wikibase/repo/includes/ParserOutput/FullEntityParserOutputGenerator.php(114): Wikibase\Repo\ParserOutput\FullEntityParserOutputGenerator->addHtmlToParserOutput(MediaWiki\Parser\ParserOutput, Wikibase\Lib\Store\EntityRevision, Wikibase\View\ItemView)
#20 /srv/mediawiki/php-master/extensions/Wikibase/repo/includes/ParserOutput/StatslibTimeRecordingEntityParserOutputGenerator.php(66): Wikibase\Repo\ParserOutput\FullEntityParserOutputGenerator->getParserOutput(Wikibase\Lib\Store\EntityRevision, bool)
#21 /srv/mediawiki/php-master/extensions/Wikibase/repo/includes/Content/EntityHandler.php(859): Wikibase\Repo\ParserOutput\StatslibTimeRecordingEntityParserOutputGenerator->getParserOutput(Wikibase\Lib\Store\EntityRevision, bool)
#22 /srv/mediawiki/php-master/extensions/Wikibase/repo/includes/Content/ItemHandler.php(301): Wikibase\Repo\Content\EntityHandler->getParserOutputFromEntityView(Wikibase\Repo\Content\ItemContent, int, MediaWiki\Parser\ParserOptions, bool)
#23 /srv/mediawiki/php-master/extensions/Wikibase/repo/includes/Content/EntityHandler.php(789): Wikibase\Repo\Content\ItemHandler->getParserOutputFromEntityView(Wikibase\Repo\Content\ItemContent, int, MediaWiki\Parser\ParserOptions, bool)
#24 /srv/mediawiki/php-master/includes/Content/ContentHandler.php(1574): Wikibase\Repo\Content\EntityHandler->fillParserOutput(Wikibase\Repo\Content\ItemContent, MediaWiki\Content\Renderer\ContentParseParams, MediaWiki\Parser\ParserOutput)
#25 /srv/mediawiki/php-master/includes/Content/Renderer/ContentRenderer.php(62): MediaWiki\Content\ContentHandler->getParserOutput(Wikibase\Repo\Content\ItemContent, MediaWiki\Content\Renderer\ContentParseParams)
#26 /srv/mediawiki/php-master/includes/Revision/RenderedRevision.php(246): MediaWiki\Content\Renderer\ContentRenderer->getParserOutput(Wikibase\Repo\Content\ItemContent, MediaWiki\Page\PageIdentityValue, MediaWiki\Revision\RevisionStoreCacheRecord, MediaWiki\Parser\ParserOptions, array)
#27 /srv/mediawiki/php-master/includes/Revision/RenderedRevision.php(219): MediaWiki\Revision\RenderedRevision->getSlotParserOutputUncached(Wikibase\Repo\Content\ItemContent, array)
#28 /srv/mediawiki/php-master/includes/Revision/RevisionRenderer.php(226): MediaWiki\Revision\RenderedRevision->getSlotParserOutput(string, array)
#29 /srv/mediawiki/php-master/includes/Revision/RevisionRenderer.php(159): MediaWiki\Revision\RevisionRenderer->combineSlotOutput(MediaWiki\Revision\RenderedRevision, MediaWiki\Parser\ParserOptions, array)
#30 /srv/mediawiki/php-master/includes/Revision/RenderedRevision.php(182): MediaWiki\Revision\RevisionRenderer->MediaWiki\Revision\{closure}(MediaWiki\Revision\RenderedRevision, array)
#31 /srv/mediawiki/php-master/includes/Page/ParserOutputAccess.php(593): MediaWiki\Revision\RenderedRevision->getRevisionParserOutput()
#32 /srv/mediawiki/php-master/includes/Page/ParserOutputAccess.php(684): MediaWiki\Page\ParserOutputAccess->renderRevision(MediaWiki\Page\WikiPage, MediaWiki\Parser\ParserOptions, MediaWiki\Revision\RevisionStoreCacheRecord, array)
#33 /srv/mediawiki/php-master/includes/PoolCounter/PoolCounterWorkViaCallback.php(68): MediaWiki\Page\ParserOutputAccess->MediaWiki\Page\{closure}()
#34 /srv/mediawiki/php-master/includes/PoolCounter/PoolCounterWork.php(159): MediaWiki\PoolCounter\PoolCounterWorkViaCallback->doWork()
#35 /srv/mediawiki/php-master/includes/Page/ParserOutputAccess.php(498): MediaWiki\PoolCounter\PoolCounterWork->execute()
#36 /srv/mediawiki/php-master/includes/Page/Article.php(882): MediaWiki\Page\ParserOutputAccess->getParserOutput(MediaWiki\Page\WikiPage, MediaWiki\Parser\ParserOptions, MediaWiki\Revision\RevisionStoreCacheRecord, array)
#37 /srv/mediawiki/php-master/includes/Page/Article.php(543): MediaWiki\Page\Article->generateContentOutput(MediaWiki\User\User, MediaWiki\Parser\ParserOptions, int, MediaWiki\Output\OutputPage, array)
#38 /srv/mediawiki/php-master/extensions/Wikibase/repo/includes/Actions/ViewEntityAction.php(53): MediaWiki\Page\Article->view()
#39 /srv/mediawiki/php-master/extensions/Wikibase/repo/includes/Actions/ViewEntityAction.php(28): Wikibase\Repo\Actions\ViewEntityAction->showEntityPage()
#40 /srv/mediawiki/php-master/includes/Actions/ActionEntryPoint.php(753): Wikibase\Repo\Actions\ViewEntityAction->show()
#41 /srv/mediawiki/php-master/includes/Actions/ActionEntryPoint.php(511): MediaWiki\Actions\ActionEntryPoint->performAction(MediaWiki\Page\Article, MediaWiki\Title\Title)
#42 /srv/mediawiki/php-master/includes/Actions/ActionEntryPoint.php(145): MediaWiki\Actions\ActionEntryPoint->performRequest()
#43 /srv/mediawiki/php-master/includes/MediaWikiEntryPoint.php(180): MediaWiki\Actions\ActionEntryPoint->execute()
#44 /srv/mediawiki/php-master/index.php(44): MediaWiki\MediaWikiEntryPoint->run()
#45 /srv/mediawiki/w/index.php(3): require(string)
#46 {main}

What happens?:

What should have happened instead?:

Software version (on page; skip for WMF-hosted wikis like Wikipedia):

ProductVersion
MediaWiki1.47.0-alpha (49dd1c5) 07:31, 8 May 2026
PHP8.3.30 (fpm-fcgi)
ICU67.1
MariaDB10.6.17-MariaDB-log
wikidiff21.14.1
Pygments2.19.2
LilyPond2.22.0
OpenSearch1.3.20
LuaSandbox4.1.2
Lua5.1.5

Related Objects

Event Timeline

Comment Actions

Merged on Tuesday, so the parent task can probably removed as it's not blocking this week's train

Comment Actions

Strangely, I haven’t found any occurrences of the hard deprecation in Logstash so far (I checked mediawiki-deprecated and mediawiki-errors); the patch adding the hard deprecation was included in 1.46.0-wmf.26, so it should have been deployed…

Comment Actions

No, that’s the error, not the deprecation warning 🤦️

Comment Actions

I think this is a bug in MediaWiki core, not Wikibase… already passes a language into :

	private function getFileMetaHtml( File $file ) {
		return $this->language->semicolonList( [
			htmlspecialchars( $file->getDimensionsString( $this->language ) ),
			htmlspecialchars( $this->language->formatSize( $file->getSize() ) ),
		] );
	}

(AFAICT, it’s not possible for to be ; it must be a instance.) But somewhere between , , and , that language gets lost, and then throws an error about the language being missing. ( takes a language parameter, but the cache only uses the as the key? The language is only used when a new handler is being created, but then the same handler is reused later regardless of which language it was originally created with (if any) and which language is now being requested?)

Comment Actions

This is likely the same language caching bug, given that CommonsInlineImageFormatter calls File::transform, which again calls File::getHandler without a language:
https://gerrit.wikimedia.org/g/mediawiki/core/+/master/includes/FileRepo/File/File.php#1273
So my patch in the other issue should fix this bug as well.

Comment Actions

From a quick look at that patch, I agree that it’s likely to fix this task; but I also think the patch might need more work (I have the same concern that you pointed out in this comment – that it feels brittle to modify the language of existing handlers).

Comment Actions

Change #1284897 had a related patch set uploaded (by MGChecker; author: MGChecker):

[mediawiki/core@master] Fix MediaHandler caching to not preserve language

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

Comment Actions

Change #1285834 had a related patch set uploaded (by Jforrester; author: Jforrester):

[mediawiki/core@master] Revert "Remove MediaHandler language fallback"

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

Comment Actions

Change #1285834 merged by jenkins-bot:

[mediawiki/core@master] Revert "Remove MediaHandler language fallback"

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

matmarex subscribed.
Comment Actions

The revert resolves the exception, now there is a a deprecation instead. I filed a separate task for it: T425988 (@MGChecker's patch can probably be repurposed for that one).

Comment Actions

Change #1284897 merged by jenkins-bot:

[mediawiki/core@master] Fix MediaHandler caching to not preserve language

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

Comment Actions

Change #1286464 had a related patch set uploaded (by Jforrester; author: MGChecker):

[mediawiki/core@wmf/1.47.0-wmf.2] Fix MediaHandler caching to not preserve language

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

Comment Actions

Change #1286465 had a related patch set uploaded (by Jforrester; author: MGChecker):

[mediawiki/core@wmf/1.47.0-wmf.1] Fix MediaHandler caching to not preserve language

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

Comment Actions

Change #1286464 merged by jenkins-bot:

[mediawiki/core@wmf/1.47.0-wmf.2] Fix MediaHandler caching to not preserve language

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

Comment Actions

Mentioned in SAL (#wikimedia-operations) [2026-05-12T19:27:38Z] <dancy@deploy1003> Started scap sync-world: Backport for [[gerrit:1286464|Fix MediaHandler caching to not preserve language (T425988 T425740 T425782)]]

Comment Actions

Mentioned in SAL (#wikimedia-operations) [2026-05-12T19:30:04Z] <dancy@deploy1003> jforrester, dancy: Backport for [[gerrit:1286464|Fix MediaHandler caching to not preserve language (T425988 T425740 T425782)]] synced to the testservers (see https://wikitech.wikimedia.org/wiki/Mwdebug). Changes can now be verified there.

Comment Actions

Mentioned in SAL (#wikimedia-operations) [2026-05-12T19:34:45Z] <dancy@deploy1003> Finished scap sync-world: Backport for [[gerrit:1286464|Fix MediaHandler caching to not preserve language (T425988 T425740 T425782)]] (duration: 07m 07s)

Comment Actions

Change #1286465 abandoned by Hashar:

[mediawiki/core@wmf/1.47.0-wmf.1] Fix MediaHandler caching to not preserve language

Reason:

Abandoning per previous comment. The reason is the change targets 1.47.0-wmf.1 which is no more live in production (we are at wmf.4).

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

Content licensed under Creative Commons Attribution-ShareAlike (CC BY-SA) 4.0 unless otherwise noted; code licensed under GNU General Public License (GPL) 2.0 or later and other open source licenses. By using this site, you agree to the Terms of Use, Privacy Policy, and Code of Conduct. · Wikimedia Foundation · Privacy Policy · Code of Conduct · Terms of Use · Disclaimer · CC-BY-SA · GPL · Credits