Page MenuHomePhabricator

Parsing empty string results in DOMNode::appendChild(): Document Fragment is empty
Closed, ResolvedPublicBUG REPORT

Description

An API request such as action=visualeditor&page=Lorem&paction=parsefragment&wikitext= (with empty wikitext) results in:

Warning: DOMNode::appendChild(): Document Fragment is empty in includes/parser/ContentHolder.php on line 290

#0 includes/parser/ContentHolder.php(131): MediaWiki\Parser\ContentHolder->convertDomToHtml()
#1 includes/parser/ParserOutput.php(3349): MediaWiki\Parser\ContentHolder->getAsHtmlString('...')
#2 includes/parser/ParserOutput.php(419): MediaWiki\Parser\ParserOutput->getContentHolderText()
#3 extensions/VisualEditor/includes/DirectParsoidClient.php(179): MediaWiki\Parser\ParserOutput->getRawText()
#4 extensions/VisualEditor/includes/ApiParsoidTrait.php(146): MediaWiki\Extension\VisualEditor\DirectParsoidClient->transformWikitext(Object(MediaWiki\Title\Title), Object(LanguageEn), '', true, NULL, false)
#5 extensions/VisualEditor/includes/ApiVisualEditor.php(499): MediaWiki\Extension\VisualEditor\ApiVisualEditor->transformWikitext(Object(MediaWiki\Title\Title), '', true)
#6 includes/api/ApiMain.php(2036): MediaWiki\Extension\VisualEditor\ApiVisualEditor->execute()
#7 includes/api/ApiMain.php(944): MediaWiki\Api\ApiMain->executeAction()
#8 includes/api/ApiMain.php(915): MediaWiki\Api\ApiMain->executeActionWithErrorHandling()
#9 includes/api/ApiEntryPoint.php(138): MediaWiki\Api\ApiMain->execute()
#10 includes/MediaWikiEntryPoint.php(184): MediaWiki\Api\ApiEntryPoint->execute()
#11 api.php(30): MediaWiki\MediaWikiEntryPoint->run()

Event Timeline

Samwilson renamed this task from Parsing empty string results in OMNode::appendChild(): Document Fragment is empty to Parsing empty string results in DOMNode::appendChild(): Document Fragment is empty.Oct 9 2025, 5:10 AM

Change #1194805 had a related patch set uploaded (by Samwilson; author: Samwilson):

[mediawiki/core@master] [parser] Check that body framgment has content before appending

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

MusikAnimal removed cscott as the assignee of this task.
MusikAnimal added a subscriber: cscott.

Could be a PHP pull request since there is a TODO for removing that warning, in dom_node_check_legacy_insertion_validity():

	if (warn_empty_fragment && child->type == XML_DOCUMENT_FRAG_NODE && child->children == NULL) {
		/* TODO Drop Warning? */
		php_error_docref(NULL, E_WARNING, "Document Fragment is empty");
		return false;
	}

Browsers do not throw for such insertions.

Change #1194805 merged by jenkins-bot:

[mediawiki/core@master] parser: Check that body fragment has content before appending

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

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

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

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

Change #1217480 merged by jenkins-bot:

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

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