Page MenuHomePhabricator

Tokenizer doesn't seem to handle nested new (template3) parser functions
Open, Needs TriagePublic

Description

From https://prv-tests.wmcloud.org/diff/siwiki/Template:User-multi%2Ftemplate%2Fsandbox

Snipit pulled out

{{#ifeq:{{{doc<noinclude>|yes</noinclude>}}}
 |yes
 |This is a user link template for use internally on Wikipedia.
{{#ifexist:{{FULLPAGENAME}}/doc|{{{{FULLPAGENAME}}/doc}}}}
}}

Commenting out the change to tplarg_or_template from https://github.com/wikimedia/mediawiki-services-parsoid/commit/cd0b82d9d2fb17eb504f503fcbd05a0fda92f2cf we have

$ cat t | php bin/parse.php --domain si.wikipedia.org
<p data-parsoid='{"dsr":[0,176,0,0]}'><span about="#mwt1" typeof="mw:Transclusion" data-parsoid='{"pi":[[{"k":"1"},{"k":"2"},{"k":"3"}]],"dsr":[0,176,null,null]}' data-mw='{"parts":[{"template":{"target":{"wt":"#ifeq:{{{doc|yes}}}\n ","function":"ifeq"},"params":{"1":{"wt":"yes\n "},"2":{"wt":"This is a user link template for use internally on Wikipedia.\n{{#ifexist:{{FULLPAGENAME}}/doc|{{{{FULLPAGENAME}}/doc}}}}\n"}},"i":0}}]}'>This is a user link template for use internally on Wikipedia.</span></p>

But at HEAD we have

$ cat t | php bin/parse.php --domain si.wikipedia.org
<p about="#mwt1" typeof="mw:Param" data-parsoid='{"dsr":[0,44,0,0],"firstWikitextNode":"P","pi":[[{"k":"1"}]]}' data-mw='{"parts":["{{#ifeq:",{"templatearg":{"target":{"wt":"doc&lt;noinclude>"},"params":{"1":{"wt":"yes&lt;/noinclude>"}},"i":0}}]}'>{{#ifeq:yes</p><meta typeof="mw:Includes/NoInclude/End" about="#mwt1"/>
<pre data-parsoid='{"dsr":[45,114,1,0]}'>|yes
|This is a user link template for use internally on Wikipedia.</pre>
<span about="#mwt2" typeof="mw:Transclusion" data-parsoid='{"pi":[[{"k":"1"},{"k":"2"}]],"dsr":[115,176,null,null]}' data-mw='{"parts":[{"template":{"target":{"wt":"#ifexist:{{FULLPAGENAME}}/doc","function":"ifexist"},"params":{"1":{"wt":"{{{{FULLPAGENAME}}/doc}}}}\n"}},"i":0}}]}'>
</span><p about="#mwt2">}}</p>

Notice the literal {{#ifeq:yes, etc