Page MenuHomePhabricator

JsonConfig: Exception: This method may only be called during or after validation has started
Open, Needs TriagePublicPRODUCTION ERROR

Description

Error
normalized_message
[{reqId}] {exception_url}   Exception: This method may only be called during or after validation has started
exception.trace
from /srv/mediawiki/php-1.40.0-wmf.14/extensions/JsonConfig/includes/JCObjContent.php(80)
#0 /srv/mediawiki/php-1.40.0-wmf.14/extensions/JsonConfig/includes/JCObjContent.php(453): JsonConfig\JCObjContent->getValidationData()
#1 /srv/mediawiki/php-1.40.0-wmf.14/extensions/JsonConfig/includes/JCDataContent.php(120): JsonConfig\JCObjContent->getField(string)
#2 /srv/mediawiki/php-1.40.0-wmf.14/extensions/JsonConfig/includes/JCSingleton.php(772): JsonConfig\JCDataContent->getLicenseObject()
#3 /srv/mediawiki/php-1.40.0-wmf.14/extensions/JsonConfig/includes/JCSingleton.php(879): JsonConfig\JCSingleton::getTitleLicenseCode(JsonConfig\JCTitle)
#4 /srv/mediawiki/php-1.40.0-wmf.14/includes/HookContainer/HookContainer.php(338): JsonConfig\JCSingleton::onSkinCopyrightFooter(Title, string, string, string)
#5 /srv/mediawiki/php-1.40.0-wmf.14/includes/HookContainer/HookContainer.php(137): MediaWiki\HookContainer\HookContainer->callLegacyHook(string, array, array, array)
#6 /srv/mediawiki/php-1.40.0-wmf.14/includes/HookContainer/HookRunner.php(3460): MediaWiki\HookContainer\HookContainer->run(string, array)
#7 [internal function]: MediaWiki\HookContainer\HookRunner->onSkinCopyrightFooter(Title, string, string, string)
#8 /srv/mediawiki/php-1.40.0-wmf.14/includes/skins/components/SkinComponentRegistryContext.php(139): call_user_func_array(array, array)
#9 /srv/mediawiki/php-1.40.0-wmf.14/includes/skins/components/SkinComponentFooter.php(170): MediaWiki\Skin\SkinComponentRegistryContext->runHook(string, array)
#10 /srv/mediawiki/php-1.40.0-wmf.14/includes/skins/components/SkinComponentFooter.php(126): MediaWiki\Skin\SkinComponentFooter->getCopyright()
#11 /srv/mediawiki/php-1.40.0-wmf.14/includes/skins/components/SkinComponentFooter.php(35): MediaWiki\Skin\SkinComponentFooter->getFooterInfoData()
#12 /srv/mediawiki/php-1.40.0-wmf.14/includes/skins/components/SkinComponentFooter.php(57): MediaWiki\Skin\SkinComponentFooter->getTemplateDataFooter()
#13 /srv/mediawiki/php-1.40.0-wmf.14/includes/skins/Skin.php(182): MediaWiki\Skin\SkinComponentFooter->getTemplateData()
#14 /srv/mediawiki/php-1.40.0-wmf.14/includes/skins/SkinTemplate.php(186): Skin->getTemplateData()
#15 /srv/mediawiki/php-1.40.0-wmf.14/includes/skins/SkinMustache.php(88): SkinTemplate->getTemplateData()
#16 /srv/mediawiki/php-1.40.0-wmf.14/skins/Vector/includes/SkinVectorLegacy.php(175): SkinMustache->getTemplateData()
#17 /srv/mediawiki/php-1.40.0-wmf.14/includes/skins/SkinMustache.php(58): MediaWiki\Skins\Vector\SkinVectorLegacy->getTemplateData()
#18 /srv/mediawiki/php-1.40.0-wmf.14/includes/skins/SkinTemplate.php(179): SkinMustache->generateHTML()
#19 /srv/mediawiki/php-1.40.0-wmf.14/includes/OutputPage.php(2889): SkinTemplate->outputPage()
#20 /srv/mediawiki/php-1.40.0-wmf.14/includes/MediaWiki.php(931): OutputPage->output(boolean)
#21 /srv/mediawiki/php-1.40.0-wmf.14/includes/MediaWiki.php(571): MediaWiki->main()
#22 /srv/mediawiki/php-1.40.0-wmf.14/index.php(50): MediaWiki->run()
#23 /srv/mediawiki/php-1.40.0-wmf.14/index.php(46): wfIndexMain()
#24 /srv/mediawiki/w/index.php(3): require(string)
#25 {main}
Impact
Notes

Only one occurrence, most probably triggered by user input?

That comes from onSkinCopyrightFooter hook and JsonConfig.

Details

Request URL
https://commons.wikimedia.org/wiki/Data:Sandbox/0x010C/test.map

Event Timeline

Jdlrobson subscribed.

The SkinCopyrightFooter hook is called in mediawiki core, so this looks like an issue in JsonConfig to me. The exception is called here https://gerrit.wikimedia.org/g/mediawiki/extensions/JsonConfig/+/9291e65ba3e96c4f9e60300d271eb7c4b6ec8122/includes/JCObjContent.php#81

Vector has no special handling for copyright notice.

hashar renamed this task from Exception: This method may only be called during or after validation has started to JsonConfig: Exception: This method may only be called during or after validation has started.Jan 4 2023, 8:20 AM

Thanks @Jdlrobson. I am adding #product-infrastructure-team-backlog which apparently maintains JsonConfig according to mw:Developers/Maintainers.

From what I see in the logs there is only a few references to this issue:
https://logstash.wikimedia.org/goto/bad1aa38bacd3f3d6a3484d730f9a4e2

Since JsonConfig is not something we actively work on, is it something we should prioritize?
If not, lets just keep an eye and prioritize if it becomes more frequent.

I can replicate this reliably on https://commons.wikimedia.org/wiki/Data:Sandbox/0x010C/test.map?useskin=vector-2022
While traffic is low, I guess the risk here is if a spider / bot targets this URL at larger volumes this would spike.

This page has content model wikitext but title suggests Map.JsonConfig. And the content is also not JSON.

JsonConfig content model detection is done in used by this extension hooks by guessing it from title format, so it is activated.

In T325312, @hashar wrote:

That comes from onSkinCopyrightFooter

JsonConfig tries to search "license" field in the text to change license displayed in the footer.

As of writing, there's 634 in the last 24H. I obviously hasn't checked the stack traces of all of them, but seem many are /w/index.php?action=info&curid=$id

Error
normalized_message
[{reqId}] {exception_url}   LogicException: This method may only be called during or after validation has started
FrameLocationCall
from/srv/mediawiki/php-1.44.0-wmf.20/extensions/JsonConfig/includes/JCObjContent.php(79)
#0/srv/mediawiki/php-1.44.0-wmf.20/extensions/JsonConfig/includes/JCObjContent.php(442)JsonConfig\JCObjContent->getValidationData()
#1/srv/mediawiki/php-1.44.0-wmf.20/extensions/JsonConfig/includes/JCDataContent.php(166)JsonConfig\JCObjContent->getField(string)
#2/srv/mediawiki/php-1.44.0-wmf.20/extensions/JsonConfig/includes/JCHooks.php(249)JsonConfig\JCDataContent->getLicenseObject()
#3/srv/mediawiki/php-1.44.0-wmf.20/extensions/JsonConfig/includes/JCHooks.php(353)JsonConfig\JCHooks::getTitleLicenseCode(JsonConfig\JCTitle)
#4/srv/mediawiki/php-1.44.0-wmf.20/includes/HookContainer/HookContainer.php(155)JsonConfig\JCHooks->onSkinCopyrightFooterMessage(MediaWiki\Title\Title, string, MediaWiki\Message\Message)
#5/srv/mediawiki/php-1.44.0-wmf.20/includes/HookContainer/HookRunner.php(3627)MediaWiki\HookContainer\HookContainer->run(string, array)
#6/srv/mediawiki/php-1.44.0-wmf.20/includes/skins/components/SkinComponentCopyright.php(105)MediaWiki\HookContainer\HookRunner->onSkinCopyrightFooterMessage(MediaWiki\Title\Title, string, MediaWiki\Message\Message)
#7/srv/mediawiki/php-1.44.0-wmf.20/includes/skins/components/SkinComponentCopyright.php(40)MediaWiki\Skin\SkinComponentCopyright->getCopyrightHTML()
#8/srv/mediawiki/php-1.44.0-wmf.20/includes/skins/Skin.php(214)MediaWiki\Skin\SkinComponentCopyright->getTemplateData()
#9/srv/mediawiki/php-1.44.0-wmf.20/includes/skins/SkinTemplate.php(188)Skin->getTemplateData()
#10/srv/mediawiki/php-1.44.0-wmf.20/includes/skins/SkinMustache.php(131)SkinTemplate->getTemplateData()
#11/srv/mediawiki/php-1.44.0-wmf.20/skins/Vector/includes/SkinVector22.php(314)SkinMustache->getTemplateData()
#12/srv/mediawiki/php-1.44.0-wmf.20/includes/skins/SkinMustache.php(93)MediaWiki\Skins\Vector\SkinVector22->getTemplateData()
#13/srv/mediawiki/php-1.44.0-wmf.20/includes/skins/SkinTemplate.php(181)SkinMustache->generateHTML()
#14/srv/mediawiki/php-1.44.0-wmf.20/includes/skins/Skin.php(698)SkinTemplate->outputPage()
#15/srv/mediawiki/php-1.44.0-wmf.20/includes/Output/OutputPage.php(3197)Skin->outputPageFinal(MediaWiki\Output\OutputPage)
#16/srv/mediawiki/php-1.44.0-wmf.20/includes/actions/ActionEntryPoint.php(162)MediaWiki\Output\OutputPage->output(bool)
#17/srv/mediawiki/php-1.44.0-wmf.20/includes/MediaWikiEntryPoint.php(202)MediaWiki\Actions\ActionEntryPoint->execute()
#18/srv/mediawiki/php-1.44.0-wmf.20/index.php(58)MediaWiki\MediaWikiEntryPoint->run()
#19/srv/mediawiki/w/index.php(3)require(string)
#20{main}
Impact
Notes

We keep seeing errors as such on commonswiki since ~16th March 15:00 UTC, which leads me to believe that it is traffic related, however nothing stands out yet.

As of writing, there's 634 in the last 24H. I obviously hasn't checked the stack traces of all of them, but seem many are /w/index.php?action=info&curid=$id

Error
normalized_message
[{reqId}] {exception_url}   LogicException: This method may only be called during or after validation has started
FrameLocationCall
from/srv/mediawiki/php-1.44.0-wmf.20/extensions/JsonConfig/includes/JCObjContent.php(79)
#0/srv/mediawiki/php-1.44.0-wmf.20/extensions/JsonConfig/includes/JCObjContent.php(442)JsonConfig\JCObjContent->getValidationData()
#1/srv/mediawiki/php-1.44.0-wmf.20/extensions/JsonConfig/includes/JCDataContent.php(166)JsonConfig\JCObjContent->getField(string)
#2/srv/mediawiki/php-1.44.0-wmf.20/extensions/JsonConfig/includes/JCHooks.php(249)JsonConfig\JCDataContent->getLicenseObject()
#3/srv/mediawiki/php-1.44.0-wmf.20/extensions/JsonConfig/includes/JCHooks.php(353)JsonConfig\JCHooks::getTitleLicenseCode(JsonConfig\JCTitle)
#4/srv/mediawiki/php-1.44.0-wmf.20/includes/HookContainer/HookContainer.php(155)JsonConfig\JCHooks->onSkinCopyrightFooterMessage(MediaWiki\Title\Title, string, MediaWiki\Message\Message)
#5/srv/mediawiki/php-1.44.0-wmf.20/includes/HookContainer/HookRunner.php(3627)MediaWiki\HookContainer\HookContainer->run(string, array)
#6/srv/mediawiki/php-1.44.0-wmf.20/includes/skins/components/SkinComponentCopyright.php(105)MediaWiki\HookContainer\HookRunner->onSkinCopyrightFooterMessage(MediaWiki\Title\Title, string, MediaWiki\Message\Message)
#7/srv/mediawiki/php-1.44.0-wmf.20/includes/skins/components/SkinComponentCopyright.php(40)MediaWiki\Skin\SkinComponentCopyright->getCopyrightHTML()
#8/srv/mediawiki/php-1.44.0-wmf.20/includes/skins/Skin.php(214)MediaWiki\Skin\SkinComponentCopyright->getTemplateData()
#9/srv/mediawiki/php-1.44.0-wmf.20/includes/skins/SkinTemplate.php(188)Skin->getTemplateData()
#10/srv/mediawiki/php-1.44.0-wmf.20/includes/skins/SkinMustache.php(131)SkinTemplate->getTemplateData()
#11/srv/mediawiki/php-1.44.0-wmf.20/skins/Vector/includes/SkinVector22.php(314)SkinMustache->getTemplateData()
#12/srv/mediawiki/php-1.44.0-wmf.20/includes/skins/SkinMustache.php(93)MediaWiki\Skins\Vector\SkinVector22->getTemplateData()
#13/srv/mediawiki/php-1.44.0-wmf.20/includes/skins/SkinTemplate.php(181)SkinMustache->generateHTML()
#14/srv/mediawiki/php-1.44.0-wmf.20/includes/skins/Skin.php(698)SkinTemplate->outputPage()
#15/srv/mediawiki/php-1.44.0-wmf.20/includes/Output/OutputPage.php(3197)Skin->outputPageFinal(MediaWiki\Output\OutputPage)
#16/srv/mediawiki/php-1.44.0-wmf.20/includes/actions/ActionEntryPoint.php(162)MediaWiki\Output\OutputPage->output(bool)
#17/srv/mediawiki/php-1.44.0-wmf.20/includes/MediaWikiEntryPoint.php(202)MediaWiki\Actions\ActionEntryPoint->execute()
#18/srv/mediawiki/php-1.44.0-wmf.20/index.php(58)MediaWiki\MediaWikiEntryPoint->run()
#19/srv/mediawiki/w/index.php(3)require(string)
#20{main}
Impact
Notes

We keep seeing errors as such on commonswiki since ~16th March 15:00 UTC, which leads me to believe that it is traffic related, however nothing stands out yet.

As of writing, there's 634 in the last 24H. I obviously hasn't checked the stack traces of all of them, but seem many are /w/index.php?action=info&curid=$id

The URLs causing the errors are: