Page MenuHomePhabricator

TypeError: Return value of Wikimedia\Parsoid\Config\Env::getDOMFragment() must be an instance of Wikimedia\Parsoid\DOM\DocumentFragment, null returned
Closed, DuplicatePublicPRODUCTION ERROR

Description

Error
normalized_message
[{reqId}] {exception_url}   TypeError: Return value of Wikimedia\Parsoid\Config\Env::getDOMFragment() must be an instance of Wikimedia\Parsoid\DOM\DocumentFragment, null returned
exception.trace
from /srv/mediawiki/php-1.40.0-wmf.5/vendor/wikimedia/parsoid/src/Config/Env.php(847)
#0 /srv/mediawiki/php-1.40.0-wmf.5/vendor/wikimedia/parsoid/src/Ext/ParsoidExtensionAPI.php(300): Wikimedia\Parsoid\Config\Env->getDOMFragment(string)
#1 /srv/mediawiki/php-1.40.0-wmf.5/vendor/wikimedia/parsoid/src/Ext/Cite/RefGroup.php(102): Wikimedia\Parsoid\Ext\ParsoidExtensionAPI->getContentDOM(string)
#2 /srv/mediawiki/php-1.40.0-wmf.5/vendor/wikimedia/parsoid/src/Ext/Cite/References.php(583): Wikimedia\Parsoid\Ext\Cite\RefGroup->renderLine(Wikimedia\Parsoid\Ext\ParsoidExtensionAPI, Wikimedia\Parsoid\DOM\Element, stdClass)
#3 /srv/mediawiki/php-1.40.0-wmf.5/vendor/wikimedia/parsoid/src/Ext/Cite/References.php(632): Wikimedia\Parsoid\Ext\Cite\References::insertReferencesIntoDOM(Wikimedia\Parsoid\Ext\ParsoidExtensionAPI, Wikimedia\Parsoid\DOM\Element, Wikimedia\Parsoid\Ext\Cite\ReferencesData, boolean)
#4 /srv/mediawiki/php-1.40.0-wmf.5/vendor/wikimedia/parsoid/src/Ext/Cite/RefProcessor.php(25): Wikimedia\Parsoid\Ext\Cite\References::insertMissingReferencesIntoDOM(Wikimedia\Parsoid\Ext\ParsoidExtensionAPI, Wikimedia\Parsoid\Ext\Cite\ReferencesData, Wikimedia\Parsoid\DOM\Element)
#5 /srv/mediawiki/php-1.40.0-wmf.5/vendor/wikimedia/parsoid/src/Wt2Html/DOMPostProcessor.php(167): Wikimedia\Parsoid\Ext\Cite\RefProcessor->wtPostprocess(Wikimedia\Parsoid\Ext\ParsoidExtensionAPI, Wikimedia\Parsoid\DOM\Element, array, boolean)
#6 /srv/mediawiki/php-1.40.0-wmf.5/vendor/wikimedia/parsoid/src/Wt2Html/DOMPostProcessor.php(849): Wikimedia\Parsoid\Wt2Html\DOMPostProcessor->Wikimedia\Parsoid\Wt2Html\{closure}(Wikimedia\Parsoid\DOM\Element, array, boolean)
#7 /srv/mediawiki/php-1.40.0-wmf.5/vendor/wikimedia/parsoid/src/Wt2Html/DOMPostProcessor.php(890): Wikimedia\Parsoid\Wt2Html\DOMPostProcessor->doPostProcess(Wikimedia\Parsoid\DOM\Element)
#8 /srv/mediawiki/php-1.40.0-wmf.5/vendor/wikimedia/parsoid/src/Wt2Html/DOMPostProcessor.php(908): Wikimedia\Parsoid\Wt2Html\DOMPostProcessor->process(Wikimedia\Parsoid\DOM\Element)
#9 /srv/mediawiki/php-1.40.0-wmf.5/vendor/wikimedia/parsoid/src/Wt2Html/ParserPipeline.php(180): Wikimedia\Parsoid\Wt2Html\DOMPostProcessor->processChunkily(string, array)
#10 /srv/mediawiki/php-1.40.0-wmf.5/vendor/wikimedia/parsoid/src/Wt2Html/ParserPipelineFactory.php(299): Wikimedia\Parsoid\Wt2Html\ParserPipeline->parseChunkily(string, array)
#11 /srv/mediawiki/php-1.40.0-wmf.5/vendor/wikimedia/parsoid/src/Wikitext/ContentModelHandler.php(123): Wikimedia\Parsoid\Wt2Html\ParserPipelineFactory->parse(string)
#12 /srv/mediawiki/php-1.40.0-wmf.5/vendor/wikimedia/parsoid/src/Parsoid.php(172): Wikimedia\Parsoid\Wikitext\ContentModelHandler->toDOM(Wikimedia\Parsoid\Ext\ParsoidExtensionAPI)
#13 /srv/mediawiki/php-1.40.0-wmf.5/vendor/wikimedia/parsoid/src/Parsoid.php(210): Wikimedia\Parsoid\Parsoid->parseWikitext(MediaWiki\Parser\Parsoid\Config\PageConfig, ParserOutput, array)
#14 /srv/mediawiki/php-1.40.0-wmf.5/includes/Rest/Handler/ParsoidHandler.php(781): Wikimedia\Parsoid\Parsoid->wikitext2html(MediaWiki\Parser\Parsoid\Config\PageConfig, array, NULL, ParserOutput)
#15 /srv/mediawiki/php-1.40.0-wmf.5/vendor/wikimedia/parsoid/extension/src/Rest/Handler/PageHandler.php(92): MediaWiki\Rest\Handler\ParsoidHandler->wt2html(MediaWiki\Parser\Parsoid\Config\PageConfig, array)
#16 /srv/mediawiki/php-1.40.0-wmf.5/includes/Rest/Router.php(487): MWParsoid\Rest\Handler\PageHandler->execute()
#17 /srv/mediawiki/php-1.40.0-wmf.5/includes/Rest/Router.php(406): MediaWiki\Rest\Router->executeHandler(MWParsoid\Rest\Handler\PageHandler)
#18 /srv/mediawiki/php-1.40.0-wmf.5/includes/Rest/EntryPoint.php(170): MediaWiki\Rest\Router->execute(MediaWiki\Rest\RequestFromGlobals)
#19 /srv/mediawiki/php-1.40.0-wmf.5/includes/Rest/EntryPoint.php(135): MediaWiki\Rest\EntryPoint->execute()
#20 /srv/mediawiki/php-1.40.0-wmf.5/rest.php(31): MediaWiki\Rest\EntryPoint::main()
#21 /srv/mediawiki/w/rest.php(3): require(string)
#22 {main}
Impact
Notes

Details

Request URL
https://en.wikisource.org/w/rest.php/en.wikisource.org/v3/page/pagebundle/The_American_Revolution_(scriptural_style)/12674949

Event Timeline

ssastry triaged this task as Medium priority.Oct 20 2022, 3:25 PM
ssastry moved this task from Needs Triage to Bugs & Crashers on the Parsoid board.

Minimal reproducer, as provided by @ssastry :

<i <ref>y</ref>>

z

This triggers an "interesting" set of events, all expected considering the wikitext:

  • the ref creates a sealed fragment
  • the ref is also considered an attribute of the <i> tag
  • the <i> tag is duplicated for the second paragraph because it wasn't closed
  • all attributes are cloned during the duplication

So we're basically trying to include the same sealed fragment twice, which crashes because it's removed from the set of fragments in the first pass.

This is a corner case of a corner case (the page comes from an OCR, and this actually does not look like "intentional wikitext"), but the underlying issue is real: we probably shouldn't clone sealed fragments when cloning a tag. So: fixing this on Monday, hopefully :)

Dupe of T260082 but I'll let you close it out depending on how you want to address it

Closing as duplicate of T260082.