Page MenuHomePhabricator

[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 Special:Version 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

Event Timeline

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

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…

Definitely shows up in Beta Logstash though. No, that’s the error, not the deprecation warning 🤦️

image.png (1,904×412 px, 67 KB)

I think this is a bug in MediaWiki core, not Wikibase… CommonsInlineImageFormatter::getFileMetaHtml() already passes a language into File:

	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 $this->language to be null; it must be a Language instance.) But somewhere between File, MediaHandler, and MediaHandlerFactory, that language gets lost, and then MediaHandler throws an error about the language being missing. (MediaHandlerFactory::getHandler() takes a language parameter, but the $this->handlers cache only uses the $type 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?)

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.

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).

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

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

Change #1285834 merged by jenkins-bot:

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

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

matmarex subscribed.

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).

Change #1284897 merged by jenkins-bot:

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

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

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

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

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

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)]]

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.

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)

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

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

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

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

Change #1307629 merged by jenkins-bot:

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

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