Stack Trace: from /srv/mediawiki/php-1.38.0-wmf.17/vendor/wikimedia/parsoid/src/Wt2Html/PP/Processors/MarkFosteredContent.php(99) #0 /srv/mediawiki/php-1.38.0-wmf.17/vendor/wikimedia/parsoid/src/Wt2Html/PP/Processors/MarkFosteredContent.php(99): MWExceptionHandler::handleError(integer, string, string, integer, array) #1 /srv/mediawiki/php-1.38.0-wmf.17/vendor/wikimedia/parsoid/src/Wt2Html/PP/Processors/MarkFosteredContent.php(225): Wikimedia\Parsoid\Wt2Html\PP\Processors\MarkFosteredContent::insertTransclusionMetas(Wikimedia\Parsoid\Config\Env, Wikimedia\Parsoid\DOM\Compat\Element, Wikimedia\Parsoid\DOM\Compat\Element) #2 /srv/mediawiki/php-1.38.0-wmf.17/vendor/wikimedia/parsoid/src/Wt2Html/PP/Processors/MarkFosteredContent.php(235): Wikimedia\Parsoid\Wt2Html\PP\Processors\MarkFosteredContent::processRecursively(Wikimedia\Parsoid\DOM\Compat\Element, Wikimedia\Parsoid\Config\Env) #3 /srv/mediawiki/php-1.38.0-wmf.17/vendor/wikimedia/parsoid/src/Wt2Html/PP/Processors/MarkFosteredContent.php(235): Wikimedia\Parsoid\Wt2Html\PP\Processors\MarkFosteredContent::processRecursively(Wikimedia\Parsoid\DOM\Compat\Element, Wikimedia\Parsoid\Config\Env) #4 /srv/mediawiki/php-1.38.0-wmf.17/vendor/wikimedia/parsoid/src/Wt2Html/PP/Processors/MarkFosteredContent.php(235): Wikimedia\Parsoid\Wt2Html\PP\Processors\MarkFosteredContent::processRecursively(Wikimedia\Parsoid\DOM\Compat\Element, Wikimedia\Parsoid\Config\Env) #5 /srv/mediawiki/php-1.38.0-wmf.17/vendor/wikimedia/parsoid/src/Wt2Html/PP/Processors/MarkFosteredContent.php(235): Wikimedia\Parsoid\Wt2Html\PP\Processors\MarkFosteredContent::processRecursively(Wikimedia\Parsoid\DOM\Compat\Element, Wikimedia\Parsoid\Config\Env) #6 /srv/mediawiki/php-1.38.0-wmf.17/vendor/wikimedia/parsoid/src/Wt2Html/PP/Processors/MarkFosteredContent.php(235): Wikimedia\Parsoid\Wt2Html\PP\Processors\MarkFosteredContent::processRecursively(Wikimedia\Parsoid\DOM\Compat\Element, Wikimedia\Parsoid\Config\Env) #7 /srv/mediawiki/php-1.38.0-wmf.17/vendor/wikimedia/parsoid/src/Wt2Html/PP/Processors/MarkFosteredContent.php(235): Wikimedia\Parsoid\Wt2Html\PP\Processors\MarkFosteredContent::processRecursively(Wikimedia\Parsoid\DOM\Compat\Element, Wikimedia\Parsoid\Config\Env) #8 /srv/mediawiki/php-1.38.0-wmf.17/vendor/wikimedia/parsoid/src/Wt2Html/PP/Processors/MarkFosteredContent.php(235): Wikimedia\Parsoid\Wt2Html\PP\Processors\MarkFosteredContent::processRecursively(Wikimedia\Parsoid\DOM\Compat\Element, Wikimedia\Parsoid\Config\Env) #9 /srv/mediawiki/php-1.38.0-wmf.17/vendor/wikimedia/parsoid/src/Wt2Html/PP/Processors/MarkFosteredContent.php(235): Wikimedia\Parsoid\Wt2Html\PP\Processors\MarkFosteredContent::processRecursively(Wikimedia\Parsoid\DOM\Compat\Element, Wikimedia\Parsoid\Config\Env) #10 /srv/mediawiki/php-1.38.0-wmf.17/vendor/wikimedia/parsoid/src/Wt2Html/PP/Processors/MarkFosteredContent.php(235): Wikimedia\Parsoid\Wt2Html\PP\Processors\MarkFosteredContent::processRecursively(Wikimedia\Parsoid\DOM\Compat\Element, Wikimedia\Parsoid\Config\Env) #11 /srv/mediawiki/php-1.38.0-wmf.17/vendor/wikimedia/parsoid/src/Wt2Html/PP/Processors/MarkFosteredContent.php(235): Wikimedia\Parsoid\Wt2Html\PP\Processors\MarkFosteredContent::processRecursively(Wikimedia\Parsoid\DOM\Compat\Element, Wikimedia\Parsoid\Config\Env) #12 /srv/mediawiki/php-1.38.0-wmf.17/vendor/wikimedia/parsoid/src/Wt2Html/PP/Processors/MarkFosteredContent.php(235): Wikimedia\Parsoid\Wt2Html\PP\Processors\MarkFosteredContent::processRecursively(Wikimedia\Parsoid\DOM\Compat\Element, Wikimedia\Parsoid\Config\Env) #13 /srv/mediawiki/php-1.38.0-wmf.17/vendor/wikimedia/parsoid/src/Wt2Html/PP/Processors/MarkFosteredContent.php(235): Wikimedia\Parsoid\Wt2Html\PP\Processors\MarkFosteredContent::processRecursively(Wikimedia\Parsoid\DOM\Compat\Element, Wikimedia\Parsoid\Config\Env) #14 /srv/mediawiki/php-1.38.0-wmf.17/vendor/wikimedia/parsoid/src/Wt2Html/PP/Processors/MarkFosteredContent.php(249): Wikimedia\Parsoid\Wt2Html\PP\Processors\MarkFosteredContent::processRecursively(Wikimedia\Parsoid\DOM\Compat\Element, Wikimedia\Parsoid\Config\Env) #15 /srv/mediawiki/php-1.38.0-wmf.17/vendor/wikimedia/parsoid/src/Wt2Html/DOMPostProcessor.php(160): Wikimedia\Parsoid\Wt2Html\PP\Processors\MarkFosteredContent->run(Wikimedia\Parsoid\Config\Env, Wikimedia\Parsoid\DOM\Compat\Element, array, boolean) #16 /srv/mediawiki/php-1.38.0-wmf.17/vendor/wikimedia/parsoid/src/Wt2Html/DOMPostProcessor.php(986): Wikimedia\Parsoid\Wt2Html\DOMPostProcessor->Wikimedia\Parsoid\Wt2Html\{closure}(Wikimedia\Parsoid\DOM\Compat\Element, array, boolean) #17 /srv/mediawiki/php-1.38.0-wmf.17/vendor/wikimedia/parsoid/src/Wt2Html/DOMPostProcessor.php(1027): Wikimedia\Parsoid\Wt2Html\DOMPostProcessor->doPostProcess(Wikimedia\Parsoid\DOM\Compat\Element) #18 /srv/mediawiki/php-1.38.0-wmf.17/vendor/wikimedia/parsoid/src/Wt2Html/DOMPostProcessor.php(1045): Wikimedia\Parsoid\Wt2Html\DOMPostProcessor->process(Wikimedia\Parsoid\DOM\Compat\Element) #19 /srv/mediawiki/php-1.38.0-wmf.17/vendor/wikimedia/parsoid/src/Wt2Html/ParserPipeline.php(180): Wikimedia\Parsoid\Wt2Html\DOMPostProcessor->processChunkily(string, array) #20 /srv/mediawiki/php-1.38.0-wmf.17/vendor/wikimedia/parsoid/src/Wt2Html/ParserPipelineFactory.php(308): Wikimedia\Parsoid\Wt2Html\ParserPipeline->parseChunkily(string, array) #21 /srv/mediawiki/php-1.38.0-wmf.17/vendor/wikimedia/parsoid/src/Core/WikitextContentModelHandler.php(106): Wikimedia\Parsoid\Wt2Html\ParserPipelineFactory->parse(string) #22 /srv/mediawiki/php-1.38.0-wmf.17/vendor/wikimedia/parsoid/src/Parsoid.php(166): Wikimedia\Parsoid\Core\WikitextContentModelHandler->toDOM(Wikimedia\Parsoid\Config\Env) #23 /srv/mediawiki/php-1.38.0-wmf.17/vendor/wikimedia/parsoid/src/Parsoid.php(198): Wikimedia\Parsoid\Parsoid->parseWikitext(MWParsoid\Config\PageConfig, array) #24 /srv/mediawiki/php-1.38.0-wmf.17/vendor/wikimedia/parsoid/extension/src/Rest/Handler/ParsoidHandler.php(584): Wikimedia\Parsoid\Parsoid->wikitext2html(MWParsoid\Config\PageConfig, array, NULL) #25 /srv/mediawiki/php-1.38.0-wmf.17/vendor/wikimedia/parsoid/extension/src/Rest/Handler/PageHandler.php(88): MWParsoid\Rest\Handler\ParsoidHandler->wt2html(MWParsoid\Config\PageConfig, array) #26 /srv/mediawiki/php-1.38.0-wmf.17/includes/Rest/Router.php(414): MWParsoid\Rest\Handler\PageHandler->execute() #27 /srv/mediawiki/php-1.38.0-wmf.17/includes/Rest/Router.php(338): MediaWiki\Rest\Router->executeHandler(MWParsoid\Rest\Handler\PageHandler) #28 /srv/mediawiki/php-1.38.0-wmf.17/includes/Rest/EntryPoint.php(167): MediaWiki\Rest\Router->execute(MediaWiki\Rest\RequestFromGlobals) #29 /srv/mediawiki/php-1.38.0-wmf.17/includes/Rest/EntryPoint.php(132): MediaWiki\Rest\EntryPoint->execute() #30 /srv/mediawiki/php-1.38.0-wmf.17/rest.php(31): MediaWiki\Rest\EntryPoint::main() #31 /srv/mediawiki/w/rest.php(3): require(string) #32 {main}
Description
Details
- Request URL
- https://it.wikipedia.org/w/rest.php/it.wikipedia.org/v3/page/pagebundle/Mens_Sana_Basketball_Academy/125130054
Related Objects
- Duplicates Merged Here
- T299661: PHP Notice: Undefined property: Wikimedia\Parsoid\NodeData\DataParsoid::$dsr
Event Timeline
Isolated crasher,
|-{{Roster PC/inizio |larghezza_percentuale = 100 |squadra = Mens Sana Basketball Academy 2019-2020 |sfondo1 = #228b22 |colore1 = #ffffff |sfondo2 = #000000 |colore2 = #ffffff |altezza = |peso = }} {{Roster PC|n°=0|nazione=ITA|ruolo=GA|nome=Niccolò Carapelli|anno=2001|altezza=186|peso=80}}
The underlying problem can be seen with this snippet below.
[subbu@earth:~/work/wmf/parsoid] echo "|-{{1x|a}}" | php bin/parse.php --dump tplsrc [dump/tplsrc] ================================================================================ [dump/tplsrc] TEMPLATE: Template:1x ; TRANSCLUSION: "{{1x|a}}" [dump/tplsrc] -------------------------------------------------------------------------------- [dump/tplsrc] a [dump/tplsrc] -------------------------------------------------------------------------------- [dump/tplsrc] ================================================================================ [dump/tplsrc] TEMPLATE: Template:1x ; TRANSCLUSION: "{{1x|a}}" [dump/tplsrc] -------------------------------------------------------------------------------- [dump/tplsrc] a [dump/tplsrc] -------------------------------------------------------------------------------- <p data-parsoid='{"dsr":[0,10,0,0]}'>|-<span about="#mwt3" typeof="mw:Transclusion" data-parsoid='{"pi":[[{"k":"1"}]],"dsr":[2,10,null,null]}' data-mw='{"parts":[{"template":{"target":{"wt":"1x","href":"./Template:1x"},"params":{"1":{"wt":"a"}},"i":0}}]}'>a</span></p>
While the output is correct, the template is being expanded twice. In this case, it is just wasteful duplicate processing.
But, when the template argument is a table (as below), somehow the table is included twice for some reason which then messes up fostering code when the table is not closed.
[subbu@earth:~/work/wmf/parsoid] cat /tmp/wt |-{{1x| {{{!}} {{!}}foo {{!}}} }} [subbu@earth:~/work/wmf/parsoid] php bin/parse.php < /tmp/wt <p about="#mwt1" typeof="mw:Transclusion" data-parsoid='{"dsr":[0,33,0,0],"pi":[[{"k":"1"}],[{"k":"1"}]],"firstWikitextNode":"TR"}' data-mw='{"parts":["|-",{"template":{"target":{"wt":"1x","href":"./Template:1x"},"params":{"1":{"wt":"\n{{{!}}\n{{!}}foo\n{{!}}}\n"}},"i":0}},{"template":{"target":{"wt":"1x","href":"./Template:1x"},"params":{"1":{"wt":"\n{{{!}}\n{{!}}foo\n{{!}}}\n"}},"i":1}}]}'>|-</p><span about="#mwt1"> </span><table about="#mwt1"> <tbody><tr><td>foo</td></tr> </tbody></table><span about="#mwt1"> </span><span about="#mwt1"> </span><table about="#mwt1"> <tbody><tr><td>foo</td></tr> </tbody></table><span about="#mwt1"> </span>
I am certain this is the AttributeHandler fixups fighting with the TokenStreamPatcher fixups.
The AttributeHandler already extracts the content out of the the <tr> tag and splices it below (because it happens to have been a table). Now, TSP comes along, looks at token src, and re-expands it in place which duplicates the table and everything explodes.
See commit message of https://gerrit.wikimedia.org/r/c/mediawiki/services/parsoid/+/755039 for some relevant "hindsight is 20/20" wisdom.
But, I suppose we need a better handle on all the backtracking that we need to do in later parts of the pipeline because (a) we decouple template processing from the top-level, and (b) the PEG tokenizer generates the wrong tokens because of (a).
Change 766189 had a related patch set uploaded (by Subramanya Sastry; author: Subramanya Sastry):
[mediawiki/services/parsoid@master] AttributeExpander: Update token attributes/tsr correctly after processing
Change 766189 merged by jenkins-bot:
[mediawiki/services/parsoid@master] AttributeExpander: Update token attributes/tsr correctly after processing
Change 768825 had a related patch set uploaded (by Subramanya Sastry; author: Subramanya Sastry):
[mediawiki/vendor@master] Bump wikimedia/parsoid to 0.15.0-a23
Change 768825 merged by jenkins-bot:
[mediawiki/vendor@master] Bump wikimedia/parsoid to 0.15.0-a23