한국   대만   중국   일본 
? T357668 TypeError: Argument 1 passed to MediaWiki\Parser\Sanitizer::encodeAttribute() must be of the type string, null given, called in /srv/mediawiki/php-1.42.0-wmf.18/includes/xml/Xml.php on line 81
Page Menu Home Phabricator

TypeError: Argument 1 passed to MediaWiki\Parser\Sanitizer::encodeAttribute() must be of the type string, null given, called in /srv/mediawiki/php-1.42.0-wmf.18/includes/xml/Xml.php on line 81
Closed, Resolved Public PRODUCTION ERROR

Description

Error
normalized_message
[{reqId}] {exception_url}   TypeError: Argument 1 passed to MediaWiki\Parser\Sanitizer::encodeAttribute() must be of the type string, null given, called in /srv/mediawiki/php-1.42.0-wmf.18/includes/xml/Xml.php on line 81
exception.trace
from /srv/mediawiki/php-1.42.0-wmf.18/includes/parser/Sanitizer.php(834)
#0 /srv/mediawiki/php-1.42.0-wmf.18/includes/xml/Xml.php(81): MediaWiki\Parser\Sanitizer::encodeAttribute(NULL)
#1 /srv/mediawiki/php-1.42.0-wmf.18/includes/xml/Xml.php(55): Xml::expandAttributes(array)
#2 /srv/mediawiki/php-1.42.0-wmf.18/extensions/ImageMap/includes/ImageMap.php(277): Xml::element(string, array)
#3 /srv/mediawiki/php-1.42.0-wmf.18/includes/parser/Parser.php(3951): MediaWiki\Extension\ImageMap\ImageMap->render(string, array, Parser, PPTemplateFrame_Hash)
#4 /srv/mediawiki/php-1.42.0-wmf.18/includes/parser/CoreParserFunctions.php(1217): Parser->extensionSubstitution(array, PPTemplateFrame_Hash)
#5 /srv/mediawiki/php-1.42.0-wmf.18/includes/parser/Parser.php(3380): CoreParserFunctions::tagObj(Parser, PPTemplateFrame_Hash, array)
#6 /srv/mediawiki/php-1.42.0-wmf.18/includes/parser/Parser.php(3065): Parser->callParserFunction(PPTemplateFrame_Hash, string, array)
#7 /srv/mediawiki/php-1.42.0-wmf.18/includes/parser/PPFrame_Hash.php(274): Parser->braceSubstitution(array, PPTemplateFrame_Hash)
#8 /srv/mediawiki/php-1.42.0-wmf.18/extensions/Scribunto/includes/Engines/LuaCommon/LuaEngine.php(937): PPFrame_Hash->expand(PPNode_Hash_Tree)
#9 /srv/mediawiki/php-1.42.0-wmf.18/extensions/Scribunto/includes/Engines/LuaCommon/LuaEngine.php(871): MediaWiki\Extension\Scribunto\Engines\LuaCommon\LuaEngine->doCachedExpansion(PPTemplateFrame_Hash, string, array)
#10 /srv/mediawiki/php-1.42.0-wmf.18/extensions/Scribunto/includes/Engines/LuaSandbox/LuaSandboxCallback.php(31): MediaWiki\Extension\Scribunto\Engines\LuaCommon\LuaEngine->preprocess(string, string)
#11 [internal function]: MediaWiki\Extension\Scribunto\Engines\LuaSandbox\LuaSandboxCallback->__call(string, array)
#12 /srv/mediawiki/php-1.42.0-wmf.18/extensions/Scribunto/includes/Engines/LuaSandbox/LuaSandboxInterpreter.php(136): LuaSandboxFunction->call(LuaSandboxFunction)
#13 /srv/mediawiki/php-1.42.0-wmf.18/extensions/Scribunto/includes/Engines/LuaCommon/LuaEngine.php(313): MediaWiki\Extension\Scribunto\Engines\LuaSandbox\LuaSandboxInterpreter->callFunction(LuaSandboxFunction, LuaSandboxFunction)
#14 /srv/mediawiki/php-1.42.0-wmf.18/extensions/Scribunto/includes/Engines/LuaCommon/LuaModule.php(75): MediaWiki\Extension\Scribunto\Engines\LuaCommon\LuaEngine->executeFunctionChunk(LuaSandboxFunction, PPTemplateFrame_Hash)
#15 /srv/mediawiki/php-1.42.0-wmf.18/extensions/Scribunto/includes/Hooks.php(170): MediaWiki\Extension\Scribunto\Engines\LuaCommon\LuaModule->invoke(string, PPTemplateFrame_Hash)
#16 /srv/mediawiki/php-1.42.0-wmf.18/includes/parser/Parser.php(3380): MediaWiki\Extension\Scribunto\Hooks::invokeHook(Parser, PPFrame_Hash, array)
#17 /srv/mediawiki/php-1.42.0-wmf.18/includes/parser/Parser.php(3065): Parser->callParserFunction(PPFrame_Hash, string, array)
#18 /srv/mediawiki/php-1.42.0-wmf.18/includes/parser/PPFrame_Hash.php(274): Parser->braceSubstitution(array, PPFrame_Hash)
#19 /srv/mediawiki/php-1.42.0-wmf.18/includes/parser/Parser.php(2899): PPFrame_Hash->expand(PPNode_Hash_Tree, integer)
#20 /srv/mediawiki/php-1.42.0-wmf.18/includes/parser/Parser.php(1548): Parser->replaceVariables(string)
#21 /srv/mediawiki/php-1.42.0-wmf.18/includes/parser/Parser.php(656): Parser->internalParse(string)
#22 /srv/mediawiki/php-1.42.0-wmf.18/includes/content/WikitextContentHandler.php(373): Parser->parse(string, MediaWiki\Title\Title, ParserOptions, boolean, boolean, integer)
#23 /srv/mediawiki/php-1.42.0-wmf.18/includes/content/ContentHandler.php(1658): WikitextContentHandler->fillParserOutput(WikitextContent, MediaWiki\Content\Renderer\ContentParseParams, MediaWiki\Parser\ParserOutput)
#24 /srv/mediawiki/php-1.42.0-wmf.18/includes/content/Renderer/ContentRenderer.php(67): ContentHandler->getParserOutput(WikitextContent, MediaWiki\Content\Renderer\ContentParseParams)
#25 /srv/mediawiki/php-1.42.0-wmf.18/includes/Revision/RenderedRevision.php(260): MediaWiki\Content\Renderer\ContentRenderer->getParserOutput(WikitextContent, MediaWiki\Title\Title, MediaWiki\Revision\RevisionStoreRecord, ParserOptions, boolean)
#26 /srv/mediawiki/php-1.42.0-wmf.18/includes/Revision/RenderedRevision.php(232): MediaWiki\Revision\RenderedRevision->getSlotParserOutputUncached(WikitextContent, boolean)
#27 /srv/mediawiki/php-1.42.0-wmf.18/includes/Revision/RevisionRenderer.php(226): MediaWiki\Revision\RenderedRevision->getSlotParserOutput(string, array)
#28 /srv/mediawiki/php-1.42.0-wmf.18/includes/Revision/RevisionRenderer.php(164): MediaWiki\Revision\RevisionRenderer->combineSlotOutput(MediaWiki\Revision\RenderedRevision, ParserOptions, array)
#29 [internal function]: MediaWiki\Revision\RevisionRenderer->MediaWiki\Revision\{closure}(MediaWiki\Revision\RenderedRevision, array)
#30 /srv/mediawiki/php-1.42.0-wmf.18/includes/Revision/RenderedRevision.php(199): call_user_func(Closure, MediaWiki\Revision\RenderedRevision, array)
#31 /srv/mediawiki/php-1.42.0-wmf.18/includes/jobqueue/jobs/RefreshLinksJob.php(385): MediaWiki\Revision\RenderedRevision->getRevisionParserOutput(array)
#32 /srv/mediawiki/php-1.42.0-wmf.18/includes/jobqueue/jobs/RefreshLinksJob.php(266): RefreshLinksJob->getParserOutput(MediaWiki\Revision\RevisionRenderer, ParserCache, WikiPage, BufferingStatsdDataFactory)
#33 /srv/mediawiki/php-1.42.0-wmf.18/includes/jobqueue/jobs/RefreshLinksJob.php(198): RefreshLinksJob->runForTitle(MediaWiki\Title\Title)
#34 /srv/mediawiki/php-1.42.0-wmf.18/extensions/EventBus/includes/JobExecutor.php(80): RefreshLinksJob->run()
#35 /srv/mediawiki/rpc/RunSingleJob.php(60): MediaWiki\Extension\EventBus\JobExecutor->execute(array)
#36 {main}
Impact

Logspam; 251 occurrences since February 14 (not seen before then). No idea if there’s user impact.

Notes

Event Timeline

I think this might happen since Set target to $wgExternalLinkTarget because, in Parser::getExternalLinkAttribs() , the $rel returned by getExternalLinkTarget() can actually be null ?

I think this might happen since Set target to $wgExternalLinkTarget because, in Parser::getExternalLinkAttribs() , the $rel returned by getExternalLinkTarget() can actually be null ?

So, Parser::getExternalLinkAttribs() ought to unset $attribs['rel'] if it is null ? It seems legit; I presume, its not doing so is another bug; it can easily be done; but the change might affect some other parts of MediaWiki.

DLynch added subscribers: Samwilson , DLynch .

@Samwilson adding you/commtech since you reviewed the original patch, and ImageMap isn't in the component responsibility list .

MusikAnimal subscribed.

@Samwilson adding you/commtech since you reviewed the original patch, and ImageMap isn't in the component responsibility list .

https://www.mediawiki.org/wiki/Developers/Maintainers I believe is the source of truth (I'm going to help with merging everything there now, actually). ImageMap is assigned to the Editing team.

@MusikAnimal Ah, thanks for working to combine disparate lists. Seems it's another of those fun "technically we own it, but nobody on the team has ever touched it" extensions.

These increased after rolling 1.42.0-wmf.18 ( T354436 ) to group2:

2024-02-15-12:31:27.png (255×638 px, 15 KB)

1count  2histo  3first  4last   5exception              6message
70      __????? 1917    1930 ●  TypeError...........    .18 i/p/Sanitizer:834

This continues at a steady rate. Marking as a blocker and rolling back out of an abundance of caution.

Change 1003831 had a related patch set uploaded (by Gerg? Tisza; author: Gerg? Tisza):

[mediawiki/extensions/ImageMap@master] Filter out null external link attributes

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

Change 1003832 had a related patch set uploaded (by Brennen Bearnes; author: Gerg? Tisza):

[mediawiki/extensions/ImageMap@wmf/1.42.0-wmf.18] Filter out null external link attributes

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

Change 1003831 merged by jenkins-bot:

[mediawiki/extensions/ImageMap@master] Filter out null external link attributes

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

Change 1003832 merged by jenkins-bot:

[mediawiki/extensions/ImageMap@wmf/1.42.0-wmf.18] Filter out null external link attributes

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

Mentioned in SAL (#wikimedia-operations) [2024-02-15T21:53:19Z] <brennen@deploy2002> Started scap: Backport for [[gerrit:1003832|Filter out null external link attributes ( T357668 )]]

Mentioned in SAL (#wikimedia-operations) [2024-02-15T21:54:43Z] <brennen@deploy2002> brennen: Backport for [[gerrit:1003832|Filter out null external link attributes ( T357668 )]] synced to the testservers ( https://wikitech.wikimedia.org/wiki/Mwdebug )

Mentioned in SAL (#wikimedia-operations) [2024-02-15T22:05:00Z] <brennen@deploy2002> Finished scap: Backport for [[gerrit:1003832|Filter out null external link attributes ( T357668 )]] (duration: 11m 40s)

brennen lowered the priority of this task from Unbreak Now! to Needs Triage . Feb 15 2024, 10:12 PM

Removing as train blocker, leaving open in case of followup work. Thanks all for the assistance!

Change 1003834 had a related patch set uploaded (by Jforrester; author: Gerg? Tisza):

[mediawiki/extensions/ImageMap@REL1_39] Filter out null external link attributes

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

Change 1003892 had a related patch set uploaded (by C. Scott Ananian; author: C. Scott Ananian):

[mediawiki/core@master] Parser::getExternalLinkAttribs: Don't set rel attribute to null

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

Change 1003892 merged by jenkins-bot:

[mediawiki/core@master] Parser::getExternalLinkAttribs: Don't set rel attribute to null

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

Change 1003844 had a related patch set uploaded (by Gerg? Tisza; author: Gerg? Tisza):

[mediawiki/extensions/ImageMap@master] Revert "Filter out null external link attributes"

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

Change 1003845 had a related patch set uploaded (by Bartosz Dziewo?ski; author: C. Scott Ananian):

[mediawiki/core@REL1_39] Parser::getExternalLinkAttribs: Don't set rel attribute to null

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

Change 1003834 abandoned by Bartosz Dziewo?ski:

[mediawiki/extensions/ImageMap@REL1_39] Filter out null external link attributes

Reason:

Backporting the core patch instead.

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

Change 1004166 had a related patch set uploaded (by Jforrester; author: C. Scott Ananian):

[mediawiki/core@REL1_40] Parser::getExternalLinkAttribs: Don't set rel attribute to null

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

Change 1004167 had a related patch set uploaded (by Jforrester; author: C. Scott Ananian):

[mediawiki/core@REL1_41] Parser::getExternalLinkAttribs: Don't set rel attribute to null

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

Change 1003845 merged by jenkins-bot:

[mediawiki/core@REL1_39] Parser::getExternalLinkAttribs: Don't set rel attribute to null

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

Change 1003844 merged by jenkins-bot:

[mediawiki/extensions/ImageMap@master] Revert "Filter out null external link attributes"

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

Change 1004167 merged by jenkins-bot:

[mediawiki/core@REL1_41] Parser::getExternalLinkAttribs: Don't set rel attribute to null

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

Change 1004166 merged by jenkins-bot:

[mediawiki/core@REL1_40] Parser::getExternalLinkAttribs: Don't set rel attribute to null

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