Page MenuHomePhabricator

Possible to break a page by passing in a chart that is not a JSON
Closed, ResolvedPublicBUG REPORT

Description

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

What happens?:
Fatal error

What should have happened instead?:

No fatal error.

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

Other information (browser name/version, screenshots, etc.):

Event Timeline

Not a duplicate of that task.

Jdlrobson-WMF moved this task from Backlog to Up Next on the Charts board.

We're still seeing fatals on https://commons.wikimedia.beta.wmflabs.org/wiki/1993_Canadian_federal_election_localized.chart so this is not quite done.

Brooke kindly said she'd take a look.

Seddon edited projects, added Charts (Current Sprint); removed Charts.
Seddon moved this task from Current Sprint to Up Next on the Charts board.
Seddon edited projects, added Charts; removed Charts (Current Sprint).
Seddon moved this task from Up Next to Current Sprint on the Charts board.
Seddon edited projects, added Charts (Current Sprint); removed Charts.
Seddon moved this task from Incoming to Blocked on the Charts (Current Sprint) board.

backtrace below; looks like something in JsonConfig's hooks is trying to add license info to the page footer and is crapping out when errors happen (probably from trying to call fetch functions which use the validators, which are all kind of fiddly and error-prone). See if I can work this out...

MediaWiki internal error.

Original exception: [aBE0L98_22wlWTdiTSR5aAAAANU] /wiki/1993_Canadian_federal_election_localized.chart LogicException: This method may only be called during or after validation has started
Backtrace:
from /srv/mediawiki/php-master/extensions/JsonConfig/includes/JCObjContent.php(80)
#0 /srv/mediawiki/php-master/extensions/JsonConfig/includes/JCObjContent.php(443): JsonConfig\JCObjContent->getValidationData()
#1 /srv/mediawiki/php-master/extensions/JsonConfig/includes/JCDataContent.php(166): JsonConfig\JCObjContent->getField(string)
#2 /srv/mediawiki/php-master/extensions/JsonConfig/includes/JCHooks.php(251): JsonConfig\JCDataContent->getLicenseObject()
#3 /srv/mediawiki/php-master/extensions/JsonConfig/includes/JCHooks.php(355): JsonConfig\JCHooks::getTitleLicenseCode(JsonConfig\JCTitle)
#4 /srv/mediawiki/php-master/includes/HookContainer/HookContainer.php(155): JsonConfig\JCHooks->onSkinCopyrightFooterMessage(MediaWiki\Title\Title, string, MediaWiki\Message\Message)
#5 /srv/mediawiki/php-master/includes/HookContainer/HookRunner.php(3627): MediaWiki\HookContainer\HookContainer->run(string, array)
#6 /srv/mediawiki/php-master/includes/skins/components/SkinComponentCopyright.php(105): MediaWiki\HookContainer\HookRunner->onSkinCopyrightFooterMessage(MediaWiki\Title\Title, string, MediaWiki\Message\Message)
#7 /srv/mediawiki/php-master/includes/skins/components/SkinComponentCopyright.php(40): MediaWiki\Skin\SkinComponentCopyright->getCopyrightHTML()
#8 /srv/mediawiki/php-master/includes/skins/Skin.php(208): MediaWiki\Skin\SkinComponentCopyright->getTemplateData()
#9 /srv/mediawiki/php-master/includes/skins/SkinTemplate.php(194): MediaWiki\Skin\Skin->getTemplateData()
#10 /srv/mediawiki/php-master/includes/skins/SkinMustache.php(131): MediaWiki\Skin\SkinTemplate->getTemplateData()
#11 /srv/mediawiki/php-master/skins/Vector/includes/SkinVector22.php(314): MediaWiki\Skin\SkinMustache->getTemplateData()
#12 /srv/mediawiki/php-master/includes/skins/SkinMustache.php(93): MediaWiki\Skins\Vector\SkinVector22->getTemplateData()
#13 /srv/mediawiki/php-master/includes/skins/SkinTemplate.php(187): MediaWiki\Skin\SkinMustache->generateHTML()
#14 /srv/mediawiki/php-master/includes/skins/Skin.php(682): MediaWiki\Skin\SkinTemplate->outputPage()
#15 /srv/mediawiki/php-master/includes/Output/OutputPage.php(3286): MediaWiki\Skin\Skin->outputPageFinal(MediaWiki\Output\OutputPage)
#16 /srv/mediawiki/php-master/includes/actions/ActionEntryPoint.php(160): MediaWiki\Output\OutputPage->output(bool)
#17 /srv/mediawiki/php-master/includes/MediaWikiEntryPoint.php(202): MediaWiki\Actions\ActionEntryPoint->execute()
#18 /srv/mediawiki/php-master/index.php(58): MediaWiki\MediaWikiEntryPoint->run()
#19 /srv/mediawiki/w/index.php(3): require(string)
#20 {main}

Exception caught inside exception handler: [aBE0L98_22wlWTdiTSR5aAAAANU] /wiki/1993_Canadian_federal_election_localized.chart LogicException: This method may only be called during or after validation has started
Backtrace:
from /srv/mediawiki/php-master/extensions/JsonConfig/includes/JCObjContent.php(80)
#0 /srv/mediawiki/php-master/extensions/JsonConfig/includes/JCObjContent.php(443): JsonConfig\JCObjContent->getValidationData()
#1 /srv/mediawiki/php-master/extensions/JsonConfig/includes/JCDataContent.php(166): JsonConfig\JCObjContent->getField(string)
#2 /srv/mediawiki/php-master/extensions/JsonConfig/includes/JCHooks.php(251): JsonConfig\JCDataContent->getLicenseObject()
#3 /srv/mediawiki/php-master/extensions/JsonConfig/includes/JCHooks.php(355): JsonConfig\JCHooks::getTitleLicenseCode(JsonConfig\JCTitle)
#4 /srv/mediawiki/php-master/includes/HookContainer/HookContainer.php(155): JsonConfig\JCHooks->onSkinCopyrightFooterMessage(MediaWiki\Title\Title, string, MediaWiki\Message\Message)
#5 /srv/mediawiki/php-master/includes/HookContainer/HookRunner.php(3627): MediaWiki\HookContainer\HookContainer->run(string, array)
#6 /srv/mediawiki/php-master/includes/skins/components/SkinComponentCopyright.php(105): MediaWiki\HookContainer\HookRunner->onSkinCopyrightFooterMessage(MediaWiki\Title\Title, string, MediaWiki\Message\Message)
#7 /srv/mediawiki/php-master/includes/skins/components/SkinComponentCopyright.php(40): MediaWiki\Skin\SkinComponentCopyright->getCopyrightHTML()
#8 /srv/mediawiki/php-master/includes/skins/Skin.php(208): MediaWiki\Skin\SkinComponentCopyright->getTemplateData()
#9 /srv/mediawiki/php-master/includes/skins/SkinTemplate.php(194): MediaWiki\Skin\Skin->getTemplateData()
#10 /srv/mediawiki/php-master/includes/skins/SkinMustache.php(131): MediaWiki\Skin\SkinTemplate->getTemplateData()
#11 /srv/mediawiki/php-master/skins/Vector/includes/SkinVector22.php(314): MediaWiki\Skin\SkinMustache->getTemplateData()
#12 /srv/mediawiki/php-master/includes/skins/SkinMustache.php(93): MediaWiki\Skins\Vector\SkinVector22->getTemplateData()
#13 /srv/mediawiki/php-master/includes/skins/SkinTemplate.php(187): MediaWiki\Skin\SkinMustache->generateHTML()
#14 /srv/mediawiki/php-master/includes/skins/Skin.php(682): MediaWiki\Skin\SkinTemplate->outputPage()
#15 /srv/mediawiki/php-master/includes/Output/OutputPage.php(3286): MediaWiki\Skin\Skin->outputPageFinal(MediaWiki\Output\OutputPage)
#16 /srv/mediawiki/php-master/includes/exception/MWExceptionRenderer.php(197): MediaWiki\Output\OutputPage->output()
#17 /srv/mediawiki/php-master/includes/exception/MWExceptionRenderer.php(116): MediaWiki\Exception\MWExceptionRenderer::reportHTML(LogicException)
#18 /srv/mediawiki/php-master/includes/exception/MWExceptionHandler.php(137): MediaWiki\Exception\MWExceptionRenderer::output(LogicException, int)
#19 /srv/mediawiki/php-master/includes/exception/MWExceptionHandler.php(241): MediaWiki\Exception\MWExceptionHandler::report(LogicException)
#20 /srv/mediawiki/php-master/includes/MediaWikiEntryPoint.php(222): MediaWiki\Exception\MWExceptionHandler::handleException(LogicException, string)
#21 /srv/mediawiki/php-master/includes/actions/ActionEntryPoint.php(79): MediaWiki\MediaWikiEntryPoint->handleTopLevelError(LogicException)
#22 /srv/mediawiki/php-master/includes/MediaWikiEntryPoint.php(208): MediaWiki\Actions\ActionEntryPoint->handleTopLevelError(LogicException)
#23 /srv/mediawiki/php-master/index.php(58): MediaWiki\MediaWikiEntryPoint->run()
#24 /srv/mediawiki/w/index.php(3): require(string)
#25 {main}

Can reproduce locally with a broken .chart page if I set $wgRightsText as in this sample:

$wgRightsText = "our special license";

It tries to access the license data from the content, and that ends up failing when it wasn't valid. Should be able to fix that...

Change #1139933 had a related patch set uploaded (by Bvibber; author: Bvibber):

[mediawiki/extensions/JsonConfig@master] Check for content validity before extracting license

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

Change #1139933 merged by jenkins-bot:

[mediawiki/extensions/JsonConfig@master] Check for content validity before extracting license

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

Change #1140229 had a related patch set uploaded (by Bvibber; author: Bvibber):

[mediawiki/extensions/JsonConfig@wmf/1.44.0-wmf.27] Check for content validity before extracting license

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

Change #1140229 merged by jenkins-bot:

[mediawiki/extensions/JsonConfig@wmf/1.44.0-wmf.27] Check for content validity before extracting license

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

Mentioned in SAL (#wikimedia-operations) [2025-05-01T20:14:48Z] <jhuneidi@deploy1003> Started scap sync-world: Backport for [[gerrit:1140229|Check for content validity before extracting license (T389125)]], [[gerrit:1140228|Fix localization for validation errors checking tabular data (T389126)]]

Mentioned in SAL (#wikimedia-operations) [2025-05-01T20:33:48Z] <jhuneidi@deploy1003> bvibber, jhuneidi: Backport for [[gerrit:1140229|Check for content validity before extracting license (T389125)]], [[gerrit:1140228|Fix localization for validation errors checking tabular data (T389126)]] synced to the testservers (https://wikitech.wikimedia.org/wiki/Mwdebug)

Mentioned in SAL (#wikimedia-operations) [2025-05-01T20:45:23Z] <jhuneidi@deploy1003> Finished scap sync-world: Backport for [[gerrit:1140229|Check for content validity before extracting license (T389125)]], [[gerrit:1140228|Fix localization for validation errors checking tabular data (T389126)]] (duration: 30m 35s)