Page MenuHomePhabricator

Fatal error when there is an empty <source/>
Closed, ResolvedPublicPRODUCTION ERROR

Description

A few pages on MediaWiki.org currently have a fatal error when displayed, like this one or this one. The fatal error is reproducible, but if needed I got the following ID: [52998607-5938-4241-a270-af3a34f0c327] 2022-08-20 21:55:33: Erreur fatale de type « TypeError ».

It seems the common point is a tag <source /> (indeed empty) in a Translate-enabled page (EDIT: not caused by Translate), given the revision of these pages before the addition of <source /> currently works (example).

I’m not sure, but given the page Parser extension tags has a living history after the addition of the <source /> tag (on 20 February 2022), I guess the page used to work and this bug is quite recent.

Software version: 1.39.0-wmf.25

Event Timeline

I just see T315657: it could be the same bug or perhaps slightly different.

Seb35 changed the subtype of this task from "Bug Report" to "Production Error".Aug 20 2022, 10:16 PM
Seb35 added a subscriber: ssastry.

I remove Translate since I reproduced this locally on both Translate and non-Translate pages.

My local version of SyntaxHighlight is 05bc73fd1f04dcf47fb01871355e2d175ff533dc, and this occurs because of 0eef7add6756d6b952222d9094530691e7c8d6db: ping @ssastry as author of the commit.

The priority is probably not very high because empty <source /> or <syntaxhighlight /> should not happen (I was doing maintenance on Category:Pages using deprecated source tags, that’s why I see these strange syntaxes).

My local stack trace:

[d232d5abba228ecbde5340b2] /mediawiki/master/index.php?title=Abcd&action=submit TypeError: Argument 1 passed to MediaWiki\SyntaxHighlight\SyntaxHighlight::processContent() must be of the type string, null given, called in /srv/www/mediawiki/master/extensions/SyntaxHighlight_GeSHi/includes/SyntaxHighlight.php on line 175

Backtrace:

from /srv/www/mediawiki/master/extensions/SyntaxHighlight_GeSHi/includes/SyntaxHighlight.php(138)
#0 /srv/www/mediawiki/master/extensions/SyntaxHighlight_GeSHi/includes/SyntaxHighlight.php(175): MediaWiki\SyntaxHighlight\SyntaxHighlight::processContent(NULL, array, Parser)
#1 /srv/www/mediawiki/master/extensions/SyntaxHighlight_GeSHi/includes/SyntaxHighlight.php(120): MediaWiki\SyntaxHighlight\SyntaxHighlight::parserHook(NULL, array, Parser)
#2 /srv/www/mediawiki/master/includes/parser/Parser.php(4007): MediaWiki\SyntaxHighlight\SyntaxHighlight::parserHookSource(NULL, array, Parser, PPFrame_Hash)
#3 /srv/www/mediawiki/master/includes/parser/PPFrame_Hash.php(353): Parser->extensionSubstitution(array, PPFrame_Hash)
#4 /srv/www/mediawiki/master/includes/parser/Parser.php(2954): PPFrame_Hash->expand(PPNode_Hash_Tree, integer)
#5 /srv/www/mediawiki/master/includes/parser/Parser.php(1609): Parser->replaceVariables(string)
#6 /srv/www/mediawiki/master/includes/parser/Parser.php(723): Parser->internalParse(string)
#7 /srv/www/mediawiki/master/includes/content/WikitextContentHandler.php(301): Parser->parse(string, Title, ParserOptions, boolean, boolean, NULL)
#8 /srv/www/mediawiki/master/includes/content/ContentHandler.php(1721): WikitextContentHandler->fillParserOutput(WikitextContent, MediaWiki\Content\Renderer\ContentParseParams, ParserOutput)
#9 /srv/www/mediawiki/master/includes/content/Renderer/ContentRenderer.php(47): ContentHandler->getParserOutput(WikitextContent, MediaWiki\Content\Renderer\ContentParseParams)
#10 /srv/www/mediawiki/master/includes/Revision/RenderedRevision.php(266): MediaWiki\Content\Renderer\ContentRenderer->getParserOutput(WikitextContent, Title, NULL, ParserOptions, boolean)
#11 /srv/www/mediawiki/master/includes/Revision/RenderedRevision.php(237): MediaWiki\Revision\RenderedRevision->getSlotParserOutputUncached(WikitextContent, boolean)
#12 /srv/www/mediawiki/master/includes/Revision/RevisionRenderer.php(221): MediaWiki\Revision\RenderedRevision->getSlotParserOutput(string, array)
#13 /srv/www/mediawiki/master/includes/Revision/RevisionRenderer.php(158): MediaWiki\Revision\RevisionRenderer->combineSlotOutput(MediaWiki\Revision\RenderedRevision, array)
#14 [internal function]: MediaWiki\Revision\RevisionRenderer->MediaWiki\Revision\{closure}(MediaWiki\Revision\RenderedRevision, array)
#15 /srv/www/mediawiki/master/includes/Revision/RenderedRevision.php(199): call_user_func(Closure, MediaWiki\Revision\RenderedRevision, array)
#16 /srv/www/mediawiki/master/includes/Storage/DerivedPageDataUpdater.php(1438): MediaWiki\Revision\RenderedRevision->getRevisionParserOutput()
#17 [internal function]: MediaWiki\Storage\DerivedPageDataUpdater->getCanonicalParserOutput()
#18 /srv/www/mediawiki/master/includes/edit/PreparedEdit.php(97): call_user_func(array)
#19 /srv/www/mediawiki/master/extensions/SemanticMediaWiki/src/MediaWiki/EditInfo.php(106): MediaWiki\Edit\PreparedEdit->getOutput()
#20 /srv/www/mediawiki/master/extensions/SemanticMediaWiki/src/MediaWiki/Hooks/RevisionFromEditComplete.php(84): SMW\MediaWiki\EditInfo->fetchEditInfo()
#21 /srv/www/mediawiki/master/extensions/SemanticMediaWiki/src/MediaWiki/Hooks.php(608): SMW\MediaWiki\Hooks\RevisionFromEditComplete->process(Title)
#22 /srv/www/mediawiki/master/includes/HookContainer/HookContainer.php(338): SMW\MediaWiki\Hooks->onRevisionFromEditComplete(WikiPage, MediaWiki\Revision\RevisionStoreRecord, boolean, User, array)
#23 /srv/www/mediawiki/master/includes/HookContainer/HookContainer.php(137): MediaWiki\HookContainer\HookContainer->callLegacyHook(string, array, array, array)
#24 /srv/www/mediawiki/master/includes/HookContainer/HookRunner.php(3201): MediaWiki\HookContainer\HookContainer->run(string, array)
#25 /srv/www/mediawiki/master/includes/Storage/PageUpdater.php(1404): MediaWiki\HookContainer\HookRunner->onRevisionFromEditComplete(WikiPage, MediaWiki\Revision\RevisionStoreRecord, boolean, User, array)
#26 /srv/www/mediawiki/master/includes/Storage/PageUpdater.php(940): MediaWiki\Storage\PageUpdater->doModify(CommentStoreComment)
#27 /srv/www/mediawiki/master/includes/EditPage.php(2596): MediaWiki\Storage\PageUpdater->saveRevision(CommentStoreComment, integer)
#28 /srv/www/mediawiki/master/includes/EditPage.php(1904): EditPage->internalAttemptSave(array, boolean, boolean)
#29 /srv/www/mediawiki/master/includes/EditPage.php(721): EditPage->attemptSave(array)
#30 /srv/www/mediawiki/master/includes/actions/EditAction.php(73): EditPage->edit()
#31 /srv/www/mediawiki/master/includes/actions/SubmitAction.php(38): EditAction->show()
#32 /srv/www/mediawiki/master/includes/MediaWiki.php(542): SubmitAction->show()
#33 /srv/www/mediawiki/master/includes/MediaWiki.php(322): MediaWiki->performAction(Article, Title)
#34 /srv/www/mediawiki/master/includes/MediaWiki.php(905): MediaWiki->performRequest()
#35 /srv/www/mediawiki/master/includes/MediaWiki.php(562): MediaWiki->main()
#36 /srv/www/mediawiki/master/index.php(50): MediaWiki->run()
#37 /srv/www/mediawiki/master/index.php(46): wfIndexMain()
#38 {main}
Seb35 renamed this task from Fatal error when there is an empty <source/> in Translate-enabled pages to Fatal error when there is an empty <source/>.Aug 20 2022, 11:11 PM
Seb35 updated the task description. (Show Details)

Change 824860 had a related patch set uploaded (by Seb35; author: Seb35):

[mediawiki/extensions/SyntaxHighlight_GeSHi@master] Fix the case of empty <syntaxhighlight /> tags

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

Thanks for catching this and submitting a patch. What is the expectation regarding these empty tags? Do we want to lint them away in the future? Or do we want to continue accepting them?

Change 824860 merged by jenkins-bot:

[mediawiki/extensions/SyntaxHighlight_GeSHi@master] Fix the case of empty <syntaxhighlight /> tags

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

ssastry assigned this task to Seb35.

Thanks for catching this and submitting a patch. What is the expectation regarding these empty tags? Do we want to lint them away in the future? Or do we want to continue accepting them?

Given this syntax is useless, it can be considered as an error. It is already categorised in "Pages with syntax highlighting errors", but it could be added in Linter extension and/or displayed in red in the page like Lua errors (IIRC). However I’m not sure it is worth spending too much time in addition of the current category given it’s not so frequent.

Sounds good! That works for me.