Page MenuHomePhabricator

PHP Warning: Illegal offset type in Parsoid's PEG tokenizer
Closed, ResolvedPublicPRODUCTION ERROR

Description

Stack Trace:
from /srv/mediawiki/php-1.38.0-wmf.17/vendor/wikimedia/parsoid/src/Wt2Html/Grammar.php(202)
#0 /srv/mediawiki/php-1.38.0-wmf.17/vendor/wikimedia/parsoid/src/Wt2Html/Grammar.php(202): MWExceptionHandler::handleError(integer, string, string, integer, array)
#1 /srv/mediawiki/php-1.38.0-wmf.17/vendor/wikimedia/parsoid/src/Wt2Html/Grammar.php(1150): Wikimedia\Parsoid\Wt2Html\Grammar->maybeAnnotationOrExtensionTag(Wikimedia\Parsoid\Tokens\TagTk, NULL, array, Wikimedia\Parsoid\Tokens\SourceRange)
#2 /srv/mediawiki/php-1.38.0-wmf.17/vendor/wikimedia/parsoid/src/Wt2Html/Grammar.php(8796): Wikimedia\Parsoid\Wt2Html\Grammar->a92(NULL, string, boolean, boolean, array, NULL)
#3 /srv/mediawiki/php-1.38.0-wmf.17/vendor/wikimedia/parsoid/src/Wt2Html/Grammar.php(7635): Wikimedia\Parsoid\Wt2Html\Grammar->parsexmlish_tag_opened(boolean, integer, NULL, NULL)
#4 /srv/mediawiki/php-1.38.0-wmf.17/vendor/wikimedia/parsoid/src/Wt2Html/Grammar.php(5801): Wikimedia\Parsoid\Wt2Html\Grammar->parsexmlish_tag(boolean, integer, NULL, NULL)
#5 /srv/mediawiki/php-1.38.0-wmf.17/vendor/wikimedia/parsoid/src/Wt2Html/Grammar.php(3803): Wikimedia\Parsoid\Wt2Html\Grammar->parseinline_element(boolean, integer, NULL, NULL)
#6 /srv/mediawiki/php-1.38.0-wmf.17/vendor/wikimedia/parsoid/src/Wt2Html/Grammar.php(4020): Wikimedia\Parsoid\Wt2Html\Grammar->parseinlineline(boolean, integer, NULL, NULL)
#7 /srv/mediawiki/php-1.38.0-wmf.17/vendor/wikimedia/parsoid/src/Wt2Html/Grammar.php(13602): Wikimedia\Parsoid\Wt2Html\Grammar->parseblock(boolean, integer, NULL, NULL)
#8 /srv/mediawiki/php-1.38.0-wmf.17/vendor/wikimedia/parsoid/src/Wt2Html/Grammar.php(13556): Wikimedia\Parsoid\Wt2Html\Grammar->parsenested_block(boolean, integer, NULL, NULL)
#9 /srv/mediawiki/php-1.38.0-wmf.17/vendor/wikimedia/parsoid/src/Wt2Html/Grammar.php(13361): Wikimedia\Parsoid\Wt2Html\Grammar->parsenested_block_in_table(boolean, integer, NULL, NULL)
#10 /srv/mediawiki/php-1.38.0-wmf.17/vendor/wikimedia/parsoid/src/Wt2Html/Grammar.php(12509): Wikimedia\Parsoid\Wt2Html\Grammar->parsetable_data_tag(boolean, integer, NULL, NULL)
#11 /srv/mediawiki/php-1.38.0-wmf.17/vendor/wikimedia/parsoid/src/Wt2Html/Grammar.php(11169): Wikimedia\Parsoid\Wt2Html\Grammar->parsetable_data_tags(boolean, integer, NULL, NULL)
#12 /srv/mediawiki/php-1.38.0-wmf.17/vendor/wikimedia/parsoid/src/Wt2Html/Grammar.php(8659): Wikimedia\Parsoid\Wt2Html\Grammar->parsetable_content_line(boolean, integer, NULL, NULL)
#13 /srv/mediawiki/php-1.38.0-wmf.17/vendor/wikimedia/parsoid/src/Wt2Html/Grammar.php(6207): Wikimedia\Parsoid\Wt2Html\Grammar->parsetable_line(boolean, integer, NULL, NULL)
#14 /srv/mediawiki/php-1.38.0-wmf.17/vendor/wikimedia/parsoid/src/Wt2Html/Grammar.php(6349): Wikimedia\Parsoid\Wt2Html\Grammar->parseblock_line(boolean, integer, NULL, NULL)
#15 /srv/mediawiki/php-1.38.0-wmf.17/vendor/wikimedia/parsoid/src/Wt2Html/Grammar.php(3950): Wikimedia\Parsoid\Wt2Html\Grammar->parseblock_lines(boolean, integer, NULL, NULL)
#16 /srv/mediawiki/php-1.38.0-wmf.17/vendor/wikimedia/parsoid/src/Wt2Html/Grammar.php(2872): Wikimedia\Parsoid\Wt2Html\Grammar->parseblock(boolean, integer, NULL, NULL)
#17 /srv/mediawiki/php-1.38.0-wmf.17/vendor/wikimedia/parsoid/src/Wt2Html/Grammar.php(2063): Wikimedia\Parsoid\Wt2Html\Grammar->parsetlb(boolean, NULL)
#18 /srv/mediawiki/php-1.38.0-wmf.17/vendor/wikimedia/parsoid/src/Wt2Html/Grammar.php(14959): Wikimedia\Parsoid\Wt2Html\Grammar->parsestart(boolean, NULL)
#19 /srv/mediawiki/php-1.38.0-wmf.17/vendor/wikimedia/parsoid/src/Wt2Html/PegTokenizer.php(169): Wikimedia\Parsoid\Wt2Html\Grammar->parse(string, array)
#20 /srv/mediawiki/php-1.38.0-wmf.17/vendor/wikimedia/parsoid/src/Wt2Html/PegTokenizer.php(88): Wikimedia\Parsoid\Wt2Html\PegTokenizer->tokenizeSync(string, array)
#21 /srv/mediawiki/php-1.38.0-wmf.17/vendor/wikimedia/parsoid/src/Wt2Html/ParserPipeline.php(140): Wikimedia\Parsoid\Wt2Html\PegTokenizer->process(string, array)
#22 /srv/mediawiki/php-1.38.0-wmf.17/vendor/wikimedia/parsoid/src/Utils/PipelineUtils.php(105): Wikimedia\Parsoid\Wt2Html\ParserPipeline->parse(string, array)
#23 /srv/mediawiki/php-1.38.0-wmf.17/vendor/wikimedia/parsoid/src/Wt2Html/TT/TemplateHandler.php(713): Wikimedia\Parsoid\Utils\PipelineUtils::processContentInPipeline(Wikimedia\Parsoid\Config\Env, Wikimedia\Parsoid\Wt2Html\PageConfigFrame, string, array)
#24 /srv/mediawiki/php-1.38.0-wmf.17/vendor/wikimedia/parsoid/src/Wt2Html/TT/TemplateHandler.php(1228): Wikimedia\Parsoid\Wt2Html\TT\TemplateHandler->processTemplateSource(array, array, string)
#25 /srv/mediawiki/php-1.38.0-wmf.17/vendor/wikimedia/parsoid/src/Wt2Html/TT/TemplateHandler.php(1280): Wikimedia\Parsoid\Wt2Html\TT\TemplateHandler->onTemplate(Wikimedia\Parsoid\Tokens\SelfclosingTagTk)
#26 /srv/mediawiki/php-1.38.0-wmf.17/vendor/wikimedia/parsoid/src/Wt2Html/TT/TokenHandler.php(154): Wikimedia\Parsoid\Wt2Html\TT\TemplateHandler->onTag(Wikimedia\Parsoid\Tokens\SelfclosingTagTk)
#27 /srv/mediawiki/php-1.38.0-wmf.17/vendor/wikimedia/parsoid/src/Wt2Html/TokenTransformManager.php(109): Wikimedia\Parsoid\Wt2Html\TT\TokenHandler->process(array)
#28 /srv/mediawiki/php-1.38.0-wmf.17/vendor/wikimedia/parsoid/src/Wt2Html/TokenTransformManager.php(153): Wikimedia\Parsoid\Wt2Html\TokenTransformManager->processChunk(array)
#29 /srv/mediawiki/php-1.38.0-wmf.17/vendor/wikimedia/parsoid/src/Wt2Html/TokenTransformManager.php(151): Wikimedia\Parsoid\Wt2Html\TokenTransformManager->processChunkily(string, array)
#30 /srv/mediawiki/php-1.38.0-wmf.17/vendor/wikimedia/parsoid/src/Wt2Html/TreeBuilder/TreeBuilderStage.php(487): Wikimedia\Parsoid\Wt2Html\TokenTransformManager->processChunkily(string, array)
#31 [internal function]: Wikimedia\Parsoid\Wt2Html\TreeBuilder\TreeBuilderStage->processChunkily(string, array)
#32 /srv/mediawiki/php-1.38.0-wmf.17/vendor/wikimedia/parsoid/src/Wt2Html/DOMPostProcessor.php(1041): Generator->current()
#33 /srv/mediawiki/php-1.38.0-wmf.17/vendor/wikimedia/parsoid/src/Wt2Html/ParserPipeline.php(180): Wikimedia\Parsoid\Wt2Html\DOMPostProcessor->processChunkily(string, array)
#34 /srv/mediawiki/php-1.38.0-wmf.17/vendor/wikimedia/parsoid/src/Wt2Html/ParserPipelineFactory.php(308): Wikimedia\Parsoid\Wt2Html\ParserPipeline->parseChunkily(string, array)
#35 /srv/mediawiki/php-1.38.0-wmf.17/vendor/wikimedia/parsoid/src/Core/WikitextContentModelHandler.php(106): Wikimedia\Parsoid\Wt2Html\ParserPipelineFactory->parse(string)
#36 /srv/mediawiki/php-1.38.0-wmf.17/vendor/wikimedia/parsoid/src/Parsoid.php(166): Wikimedia\Parsoid\Core\WikitextContentModelHandler->toDOM(Wikimedia\Parsoid\Config\Env)
#37 /srv/mediawiki/php-1.38.0-wmf.17/vendor/wikimedia/parsoid/src/Parsoid.php(198): Wikimedia\Parsoid\Parsoid->parseWikitext(MWParsoid\Config\PageConfig, array)
#38 /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)
#39 /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)
#40 /srv/mediawiki/php-1.38.0-wmf.17/includes/Rest/Router.php(414): MWParsoid\Rest\Handler\PageHandler->execute()
#41 /srv/mediawiki/php-1.38.0-wmf.17/includes/Rest/Router.php(338): MediaWiki\Rest\Router->executeHandler(MWParsoid\Rest\Handler\PageHandler)
#42 /srv/mediawiki/php-1.38.0-wmf.17/includes/Rest/EntryPoint.php(167): MediaWiki\Rest\Router->execute(MediaWiki\Rest\RequestFromGlobals)
#43 /srv/mediawiki/php-1.38.0-wmf.17/includes/Rest/EntryPoint.php(132): MediaWiki\Rest\EntryPoint->execute()
#44 /srv/mediawiki/php-1.38.0-wmf.17/rest.php(31): MediaWiki\Rest\EntryPoint::main()
#45 /srv/mediawiki/w/rest.php(3): require(string)
#46 {main}

Details

Request URL
https://meta.wikimedia.org/w/rest.php/meta.wikimedia.org/v3/page/pagebundle/Template%3AWikimediapro/14020483

Event Timeline

That one is a <tvar| as argument of a template - we will eventually get rid of the source of this issue when we strip annotation from template arguments (already in progress around https://gerrit.wikimedia.org/r/c/mediawiki/services/parsoid/+/737825). In the meantime, I switched the tvar syntax in that page to <tvar name="title"></tvar>, which fixes the issue for this specific page. I'm still going to investigate a little longer because I'd like to understand why it breaks at the PEGParser level.

After having spent some quality time in the parser debug output, I have a minimal reproducer for this issue:

$ echo -e '<tvar {{1x|>}}</>' | php bin/parse.php

This wouldn't be supported syntax in any case, but I'll dig a bit more tomorrow to get rid of the underlying issue - it does feel icky that an array would be able to spawn in this context.

Change 755390 had a related patch set uploaded (by Isabelle Hurbain-Palatin; author: Isabelle Hurbain-Palatin):

[mediawiki/services/parsoid@master] Better handling of templated annotation attributes

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

Change 755390 merged by jenkins-bot:

[mediawiki/services/parsoid@master] Better handling of templated annotation attributes

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

Change 758585 had a related patch set uploaded (by Subramanya Sastry; author: Subramanya Sastry):

[mediawiki/vendor@master] Bump wikimedia/parsoid to 0.15.0-a18

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

Change 758585 merged by jenkins-bot:

[mediawiki/vendor@master] Bump wikimedia/parsoid to 0.15.0-a18

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

ssastry triaged this task as Medium priority.