Page MenuHomePhabricator

PHP Warning: DOMNode::appendChild(): Document Fragment is empty
Closed, ResolvedPublicPRODUCTION ERROR

Description

Error
normalized_message
[{reqId}] {exception_url}   PHP Warning: DOMNode::appendChild(): Document Fragment is empty
FrameLocationCall
from/srv/mediawiki/php-1.45.0-wmf.2/includes/OutputTransform/Stages/ParsoidLocalization.php(106)
#0[internal function]MediaWiki\Exception\MWExceptionHandler::handleError(int, string, string, int)
#1/srv/mediawiki/php-1.45.0-wmf.2/includes/OutputTransform/Stages/ParsoidLocalization.php(106)DOMNode->appendChild(Wikimedia\Parsoid\DOM\DocumentFragment)
#2/srv/mediawiki/php-1.45.0-wmf.2/includes/OutputTransform/Stages/ParsoidLocalization.php(60)MediaWiki\OutputTransform\Stages\ParsoidLocalization->localizeElement(Wikimedia\Parsoid\DOM\Element, Wikimedia\Bcp47Code\Bcp47CodeValue, Wikimedia\Parsoid\DOM\Document, MediaWiki\Title\Title)
#3/srv/mediawiki/php-1.45.0-wmf.2/vendor/wikimedia/parsoid/src/Utils/DOMTraverser.php(110)MediaWiki\OutputTransform\Stages\ParsoidLocalization->MediaWiki\OutputTransform\Stages\{closure}(Wikimedia\Parsoid\DOM\Element, null)
#4/srv/mediawiki/php-1.45.0-wmf.2/vendor/wikimedia/parsoid/src/Utils/DOMTraverser.php(188)Wikimedia\Parsoid\Utils\DOMTraverser->callHandlers(Wikimedia\Parsoid\DOM\Element, null, null)
#5/srv/mediawiki/php-1.45.0-wmf.2/vendor/wikimedia/parsoid/src/Utils/DOMTraverser.php(203)Wikimedia\Parsoid\Utils\DOMTraverser->traverseInternal(bool, null, Wikimedia\Parsoid\DOM\Element, null)
#6/srv/mediawiki/php-1.45.0-wmf.2/vendor/wikimedia/parsoid/src/Utils/DOMTraverser.php(203)Wikimedia\Parsoid\Utils\DOMTraverser->traverseInternal(bool, null, Wikimedia\Parsoid\DOM\Element, null)
#7/srv/mediawiki/php-1.45.0-wmf.2/vendor/wikimedia/parsoid/src/Utils/DOMTraverser.php(203)Wikimedia\Parsoid\Utils\DOMTraverser->traverseInternal(bool, null, Wikimedia\Parsoid\DOM\Element, null)
#8/srv/mediawiki/php-1.45.0-wmf.2/vendor/wikimedia/parsoid/src/Utils/DOMTraverser.php(203)Wikimedia\Parsoid\Utils\DOMTraverser->traverseInternal(bool, null, Wikimedia\Parsoid\DOM\Element, null)
#9/srv/mediawiki/php-1.45.0-wmf.2/vendor/wikimedia/parsoid/src/Utils/DOMTraverser.php(203)Wikimedia\Parsoid\Utils\DOMTraverser->traverseInternal(bool, null, Wikimedia\Parsoid\DOM\Element, null)
#10/srv/mediawiki/php-1.45.0-wmf.2/vendor/wikimedia/parsoid/src/Utils/DOMTraverser.php(203)Wikimedia\Parsoid\Utils\DOMTraverser->traverseInternal(bool, null, Wikimedia\Parsoid\DOM\Element, null)
#11/srv/mediawiki/php-1.45.0-wmf.2/vendor/wikimedia/parsoid/src/Utils/DOMTraverser.php(203)Wikimedia\Parsoid\Utils\DOMTraverser->traverseInternal(bool, null, Wikimedia\Parsoid\DOM\Element, null)
#12/srv/mediawiki/php-1.45.0-wmf.2/vendor/wikimedia/parsoid/src/Utils/DOMTraverser.php(144)Wikimedia\Parsoid\Utils\DOMTraverser->traverseInternal(bool, null, Wikimedia\Parsoid\DOM\Document, null)
#13/srv/mediawiki/php-1.45.0-wmf.2/includes/OutputTransform/Stages/ParsoidLocalization.php(64)Wikimedia\Parsoid\Utils\DOMTraverser->traverse(null, Wikimedia\Parsoid\DOM\Document)
#14/srv/mediawiki/php-1.45.0-wmf.2/includes/OutputTransform/ContentDOMTransformStage.php(73)MediaWiki\OutputTransform\Stages\ParsoidLocalization->transformDOM(Wikimedia\Parsoid\DOM\Document, MediaWiki\Parser\ParserOutput, MediaWiki\Parser\ParserOptions, array)
#15/srv/mediawiki/php-1.45.0-wmf.2/includes/OutputTransform/ContentDOMTransformStage.php(33)MediaWiki\OutputTransform\ContentDOMTransformStage->parsoidTransform(MediaWiki\Parser\ParserOutput, MediaWiki\Parser\ParserOptions, array)
#16/srv/mediawiki/php-1.45.0-wmf.2/includes/OutputTransform/OutputTransformPipeline.php(80)MediaWiki\OutputTransform\ContentDOMTransformStage->transform(MediaWiki\Parser\ParserOutput, MediaWiki\Parser\ParserOptions, array)
#17/srv/mediawiki/php-1.45.0-wmf.2/includes/parser/ParserOutput.php(552)MediaWiki\OutputTransform\OutputTransformPipeline->run(MediaWiki\Parser\ParserOutput, MediaWiki\Parser\ParserOptions, array)
#18/srv/mediawiki/php-1.45.0-wmf.2/includes/parser/ParserOutput.php(529)MediaWiki\Parser\ParserOutput->runPipelineInternal(MediaWiki\Parser\ParserOptions, array)
#19/srv/mediawiki/php-1.45.0-wmf.2/includes/api/ApiParse.php(552)MediaWiki\Parser\ParserOutput->runOutputPipeline(MediaWiki\Parser\ParserOptions, array)
#20/srv/mediawiki/php-1.45.0-wmf.2/includes/api/ApiMain.php(2010)MediaWiki\Api\ApiParse->execute()
#21/srv/mediawiki/php-1.45.0-wmf.2/includes/api/ApiMain.php(948)MediaWiki\Api\ApiMain->executeAction()
#22/srv/mediawiki/php-1.45.0-wmf.2/includes/api/ApiMain.php(919)MediaWiki\Api\ApiMain->executeActionWithErrorHandling()
#23/srv/mediawiki/php-1.45.0-wmf.2/includes/api/ApiEntryPoint.php(152)MediaWiki\Api\ApiMain->execute()
#24/srv/mediawiki/php-1.45.0-wmf.2/includes/MediaWikiEntryPoint.php(198)MediaWiki\Api\ApiEntryPoint->execute()
#25/srv/mediawiki/php-1.45.0-wmf.2/api.php(44)MediaWiki\MediaWikiEntryPoint->run()
#26/srv/mediawiki/w/api.php(3)require(string)
#27{main}
Notes

A stream of these warnings started flowing around 2025-05-28 18:08 UTC at a rate of about 79 per minute. It's currently the top error in logspam-watch.

Details

Request URL
https://ps.wikipedia.org/w/api.php?action=parse&format=*&page=*&parsoid=*&prop=*&redirects=*&useskin=*
Related Changes in Gerrit:

Event Timeline

They are all from pswiki and requests to the Action API to parse a page with Parsoid - 580 errors in all.

Looks like the message localization ($msg->parse / $msg->parseAsBlock) returned an empty string maybe? An edge case, but something we should probably catch. Flagging @ihurbain since she understands this better.

Change #1152296 had a related patch set uploaded (by Isabelle Hurbain-Palatin; author: Isabelle Hurbain-Palatin):

[mediawiki/core@master] Do not insert empty fragment in localization

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

Change #1152296 merged by jenkins-bot:

[mediawiki/core@master] Do not insert empty fragment in localization

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

Change #1217484 had a related patch set uploaded (by Arlolra; author: Arlolra):

[mediawiki/core@master] Use DOMCompat to append document fragment

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

Change #1217484 merged by jenkins-bot:

[mediawiki/core@master] Use DOMCompat to append document fragment

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