Page MenuHomePhabricator

Argument 1 passed to Wikimedia\Parsoid\Ext\ParsoidExtensionAPI::Wikimedia\Parsoid\Ext\{closure}() must be of the type integer, null given in ParsoidExtensionAPI.php on line 849
Closed, ResolvedPublicPRODUCTION ERROR

Description

Error

MediaWiki version: 1.35.0-wmf.39

message
Argument 1 passed to Wikimedia\Parsoid\Ext\ParsoidExtensionAPI::Wikimedia\Parsoid\Ext\{closure}() must be of the type integer, null given, called in /srv/mediawiki/php-1.35.0-wmf.39/vendor/wikimedia/parsoid/src/Ext/ParsoidExtensionAPI.php on line 849

Impact

production logspam

Notes

Details

Request ID
5703601f-cef9-4b17-b71e-26d672296f32
Request URL
https://ja.wikipedia.org/w/rest.php/ja.wikipedia.org/v3/page/pagebundle/%E5%88%A9%E7%94%A8%E8%80%85%3A%E8%91%89%E5%8F%88%E5%98%89%2Fsandbox/66710428
Stack Trace
exception.trace
#0 /srv/mediawiki/php-1.35.0-wmf.39/vendor/wikimedia/parsoid/src/Ext/ParsoidExtensionAPI.php(849): Wikimedia\Parsoid\Ext\ParsoidExtensionAPI->Wikimedia\Parsoid\Ext\{closure}(NULL)
#1 /srv/mediawiki/php-1.35.0-wmf.39/vendor/wikimedia/parsoid/src/Utils/ContentUtils.php(185): Wikimedia\Parsoid\Ext\ParsoidExtensionAPI->Wikimedia\Parsoid\Ext\{closure}(Wikimedia\Parsoid\Core\DomSourceRange)
#2 /srv/mediawiki/php-1.35.0-wmf.39/vendor/wikimedia/parsoid/src/Utils/DOMPostOrder.php(32): Wikimedia\Parsoid\Utils\ContentUtils::Wikimedia\Parsoid\Utils\{closure}(DOMElement)
#3 /srv/mediawiki/php-1.35.0-wmf.39/vendor/wikimedia/parsoid/src/Utils/ContentUtils.php(259): Wikimedia\Parsoid\Utils\DOMPostOrder::traverse(DOMElement, Closure)
#4 /srv/mediawiki/php-1.35.0-wmf.39/vendor/wikimedia/parsoid/src/Ext/ParsoidExtensionAPI.php(286): Wikimedia\Parsoid\Utils\ContentUtils::shiftDSR(Wikimedia\Parsoid\Config\Env, DOMElement, Closure)
#5 /srv/mediawiki/php-1.35.0-wmf.39/vendor/wikimedia/parsoid/src/Ext/ParsoidExtensionAPI.php(860): Wikimedia\Parsoid\Ext\ParsoidExtensionAPI->wikitextToDOM(string, array, boolean)
#6 /srv/mediawiki/php-1.35.0-wmf.39/vendor/wikimedia/parsoid/src/Ext/Gallery/Gallery.php(94): Wikimedia\Parsoid\Ext\ParsoidExtensionAPI->renderMedia(string, array)
#7 /srv/mediawiki/php-1.35.0-wmf.39/vendor/wikimedia/parsoid/src/Ext/Gallery/Gallery.php(168): Wikimedia\Parsoid\Ext\Gallery\Gallery::pLine(Wikimedia\Parsoid\Ext\ParsoidExtensionAPI, string, integer, Wikimedia\Parsoid\Ext\Gallery\Opts)
#8 [internal function]: Wikimedia\Parsoid\Ext\Gallery\Gallery->Wikimedia\Parsoid\Ext\Gallery\{closure}(array)
#9 /srv/mediawiki/php-1.35.0-wmf.39/vendor/wikimedia/parsoid/src/Ext/Gallery/Gallery.php(170): array_map(Closure, array)
#10 /srv/mediawiki/php-1.35.0-wmf.39/vendor/wikimedia/parsoid/src/Wt2Html/TT/ExtensionHandler.php(151): Wikimedia\Parsoid\Ext\Gallery\Gallery->sourceToDom(Wikimedia\Parsoid\Ext\ParsoidExtensionAPI, string, array)
#11 /srv/mediawiki/php-1.35.0-wmf.39/vendor/wikimedia/parsoid/src/Wt2Html/TT/ExtensionHandler.php(282): Wikimedia\Parsoid\Wt2Html\TT\ExtensionHandler->onExtension(Wikimedia\Parsoid\Tokens\SelfclosingTagTk)
#12 /srv/mediawiki/php-1.35.0-wmf.39/vendor/wikimedia/parsoid/src/Wt2Html/TT/TokenHandler.php(214): Wikimedia\Parsoid\Wt2Html\TT\ExtensionHandler->onTag(Wikimedia\Parsoid\Tokens\SelfclosingTagTk)
#13 /srv/mediawiki/php-1.35.0-wmf.39/vendor/wikimedia/parsoid/src/Wt2Html/TokenTransformManager.php(116): Wikimedia\Parsoid\Wt2Html\TT\TokenHandler->process(array)
#14 /srv/mediawiki/php-1.35.0-wmf.39/vendor/wikimedia/parsoid/src/Wt2Html/TokenTransformManager.php(188): Wikimedia\Parsoid\Wt2Html\TokenTransformManager->processChunk(array)
#15 /srv/mediawiki/php-1.35.0-wmf.39/vendor/wikimedia/parsoid/src/Wt2Html/TokenTransformManager.php(186): Wikimedia\Parsoid\Wt2Html\TokenTransformManager->processChunkily(string, array)
#16 /srv/mediawiki/php-1.35.0-wmf.39/vendor/wikimedia/parsoid/src/Wt2Html/HTML5TreeBuilder.php(419): Wikimedia\Parsoid\Wt2Html\TokenTransformManager->processChunkily(string, array)
#17 [internal function]: Wikimedia\Parsoid\Wt2Html\HTML5TreeBuilder->processChunkily(string, array)
#18 /srv/mediawiki/php-1.35.0-wmf.39/vendor/wikimedia/parsoid/src/Wt2Html/DOMPostProcessor.php(918): Generator->current()
#19 /srv/mediawiki/php-1.35.0-wmf.39/vendor/wikimedia/parsoid/src/Wt2Html/ParserPipeline.php(152): Wikimedia\Parsoid\Wt2Html\DOMPostProcessor->processChunkily(string, array)
#20 /srv/mediawiki/php-1.35.0-wmf.39/vendor/wikimedia/parsoid/src/Wt2Html/ParserPipeline.php(202): Wikimedia\Parsoid\Wt2Html\ParserPipeline->parseChunkily(string, array)
#21 /srv/mediawiki/php-1.35.0-wmf.39/vendor/wikimedia/parsoid/src/Wt2Html/ParserPipelineFactory.php(299): Wikimedia\Parsoid\Wt2Html\ParserPipeline->parseToplevelDoc(string, array)
#22 /srv/mediawiki/php-1.35.0-wmf.39/vendor/wikimedia/parsoid/src/Core/WikitextContentModelHandler.php(78): Wikimedia\Parsoid\Wt2Html\ParserPipelineFactory->parse(string)
#23 /srv/mediawiki/php-1.35.0-wmf.39/vendor/wikimedia/parsoid/src/Parsoid.php(152): Wikimedia\Parsoid\Core\WikitextContentModelHandler->toDOM(Wikimedia\Parsoid\Config\Env)
#24 /srv/mediawiki/php-1.35.0-wmf.39/vendor/wikimedia/parsoid/src/Parsoid.php(184): Wikimedia\Parsoid\Parsoid->parseWikitext(MWParsoid\Config\PageConfig, array)
#25 /srv/mediawiki/php-1.35.0-wmf.39/vendor/wikimedia/parsoid/extension/src/Rest/Handler/ParsoidHandler.php(533): Wikimedia\Parsoid\Parsoid->wikitext2html(MWParsoid\Config\PageConfig, array, NULL)
#26 /srv/mediawiki/php-1.35.0-wmf.39/vendor/wikimedia/parsoid/extension/src/Rest/Handler/PageHandler.php(66): MWParsoid\Rest\Handler\ParsoidHandler->wt2html(MWParsoid\Config\PageConfig, array)
#27 /srv/mediawiki/php-1.35.0-wmf.39/includes/Rest/Router.php(362): MWParsoid\Rest\Handler\PageHandler->execute()
#28 /srv/mediawiki/php-1.35.0-wmf.39/includes/Rest/Router.php(317): MediaWiki\Rest\Router->executeHandler(MWParsoid\Rest\Handler\PageHandler)
#29 /srv/mediawiki/php-1.35.0-wmf.39/includes/Rest/EntryPoint.php(139): MediaWiki\Rest\Router->execute(MediaWiki\Rest\RequestFromGlobals)
#30 /srv/mediawiki/php-1.35.0-wmf.39/includes/Rest/EntryPoint.php(106): MediaWiki\Rest\EntryPoint->execute()
#31 /srv/mediawiki/php-1.35.0-wmf.39/rest.php(31): MediaWiki\Rest\EntryPoint::main()
#32 /srv/mediawiki/w/rest.php(3): require(string)
#33 {main}

Event Timeline

ssastry triaged this task as Medium priority.Jul 9 2020, 5:13 PM
ssastry removed a project: Parsing-Team--ARCHIVED.
ssastry moved this task from Needs Triage to Bugs & Crashers on the Parsoid board.

This seems to still be happening (or again?), about 90 in the last four hours, on group1, 1.36.0-wmf.2. reqid 08a35c34-b162-47eb-b18f-f9eb728a836a is an example. Only on commonswiki.

/w/rest.php/commons.wikimedia.org/v3/page/pagebundle/Potsdam/436481327 is a sample URL path.

On parsoid master:

$ php bin/parse.php --restURL /w/rest.php/commons.wikimedia.org/v3/page/pagebundle/Potsdam/436481327
PHP Fatal error:  Uncaught TypeError: Argument 1 passed to Wikimedia\Parsoid\Ext\ParsoidExtensionAPI::Wikimedia\Parsoid\Ext\{closure}() must be of the type int, null given, called in /home/cananian/Projects/Wikimedia/Parsoid/src/Ext/ParsoidExtensionAPI.php on line 819 and defined in /home/cananian/Projects/Wikimedia/Parsoid/src/Ext/ParsoidExtensionAPI.php:781
Stack trace:
#0 /home/cananian/Projects/Wikimedia/Parsoid/src/Ext/ParsoidExtensionAPI.php(819): Wikimedia\Parsoid\Ext\ParsoidExtensionAPI->Wikimedia\Parsoid\Ext\{closure}(NULL)
#1 /home/cananian/Projects/Wikimedia/Parsoid/src/Utils/ContentUtils.php(187): Wikimedia\Parsoid\Ext\ParsoidExtensionAPI->Wikimedia\Parsoid\Ext\{closure}(Object(Wikimedia\Parsoid\Core\DomSourceRange))
#2 /home/cananian/Projects/Wikimedia/Parsoid/src/Utils/DOMPostOrder.php(32): Wikimedia\Parsoid\Utils\ContentUtils::Wikimedia\Parsoid\Utils\{closure}(Object(DOMElement))
#3 /home/cananian/Projects/Wikimedia/Parsoid/src/Utils/ContentUtils.php(261): Wikimedia\Parsoid\Utils\DOMPostOrder::traverse(Object(DO in /home/cananian/Projects/Wikimedia/Parsoid/src/Ext/ParsoidExtensionAPI.php on line 781

Different line #s on master, but same bug.

The $imageWt in question (inside ParsoidExtensionAPI::renderMedia) is:

[[File:HollViertel.jpg|120x120px|none|<center>{{langswitch|{{langswitch|de=[[:de:Holländisches Viertel|Holländisches Viertel]]|en=[[:en:Dutch Quarter|Dutch Quarter]]<center>}}]]

Note the syntax error: we've closed the }} from the inner langswitch but not the one from the outer langswitch, so the ]] closing [[File:.. is getting parsed as part of the caption.

The problematic node is:

<center data-object-id="9" about="#mwt48">]]</center>

which has DSR:

DSR: Wikimedia\Parsoid\Core\DomSourceRange::__set_state(array(
   'openWidth' => NULL,
   'closeWidth' => 0,
   'start' => NULL,
   'end' => 179,
))

which is legit, I suppose: it corresponds to the phantom <center> tag created by the treebuilder Active Formatting Elements algorithm. Technically the phantom tag starts just before the ]] aka at position 177, and that would be equally valid as a DSR (aka openWidth=0, start=177). Correction: it's actually a two nested <center> tags; this one is an unmatched open tag inside the template, which then extends to cover the ]] outside the template. The start point should be earlier and the width should be non-null, but this is broken markup to start with.

For reference, the output HTML is:

<body data-object-id="14">[[File:HollViertel.jpg|120x120px|none|<center data-object-id="1">{{langswitch|<a rel="mw:WikiLink/Interwiki" href="https://en.wikipedia.org/wiki/Dutch%20Quarter" title="en:Dutch Quarter" data-object-id="5" about="#mwt48" typeof="mw:Transclusion">Dutch Quarter</a><center data-object-id="9" about="#mwt48">]]</center></center></body>

aka, the missing }} causes the entire neither the outer [[File:... nor the outer {{langswitch... to be parsed. (Which is correct aka-legacy-compliant preprocessor error handling.) The renderMedia API recognizes this and returns an invalid image error.

Change 618071 had a related patch set uploaded (by C. Scott Ananian; owner: C. Scott Ananian):
[mediawiki/services/parsoid@master] Protect against invalid start/end offsets in ParsoidExtensionAPI::renderMedia

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

Change 618071 merged by jenkins-bot:
[mediawiki/services/parsoid@master] Protect against invalid start/end offsets in ParsoidExtensionAPI::renderMedia

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

Change 618166 had a related patch set uploaded (by C. Scott Ananian; owner: C. Scott Ananian):
[mediawiki/vendor@master] Bump wikimedia/parsoid to v0.13.0-a4

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

Change 618038 had a related patch set uploaded (by C. Scott Ananian; owner: C. Scott Ananian):
[mediawiki/vendor@wmf/1.36.0-wmf.3] Bump wikimedia/parsoid to v0.13.0-a4

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

Change 618166 merged by jenkins-bot:
[mediawiki/vendor@master] Bump wikimedia/parsoid to v0.13.0-a4

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

Change 618038 merged by jenkins-bot:
[mediawiki/vendor@wmf/1.36.0-wmf.3] Bump wikimedia/parsoid to v0.13.0-a4

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

ssastry assigned this task to cscott.
ssastry added a project: Parsing-Active-Work.