Page MenuHomePhabricator

Since switch to using parser options in construct getting "Caused "Call to a member function getMaxPPNodeCount"
Closed, InvalidPublic

Description

Since https://gerrit.wikimedia.org/r/c/mediawiki/core/+/719503 I'm seeing:

from /srv/mediawiki/w/includes/parser/PPFrame_Hash.php(88)
#0 /srv/mediawiki/w/includes/parser/Preprocessor_Hash.php(71): PPFrame_Hash->__construct(Preprocessor_Hash)
#1 /srv/mediawiki/w/extensions/PortableInfobox/includes/services/Helpers/PortableInfoboxParsingHelper.php(33): Preprocessor_Hash->newFrame()
#2 /srv/mediawiki/w/extensions/PortableInfobox/includes/services/PortableInfoboxDataService.php(199): PortableInfobox\Helpers\PortableInfoboxParsingHelper->parseIncludeonlyInfoboxes(Title)
#3 /srv/mediawiki/w/extensions/PortableInfobox/includes/PortableInfobox.hooks.php(45): PortableInfoboxDataService->reparseArticle(boolean)
#4 /srv/mediawiki/w/includes/HookContainer/HookContainer.php(338): PortableInfoboxHooks::onPageContentSave(WikiPage, User, WikitextContent, CommentStoreComment, integer, NULL, NULL, integer, Status)
#5 /srv/mediawiki/w/includes/HookContainer/HookContainer.php(137): MediaWiki\HookContainer\HookContainer->callLegacyHook(string, array, array, array)
#6 /srv/mediawiki/w/includes/HookContainer/HookRunner.php(2811): MediaWiki\HookContainer\HookContainer->run(string, array)
#7 /srv/mediawiki/w/includes/Storage/PageUpdater.php(789): MediaWiki\HookContainer\HookRunner->onPageContentSave(WikiPage, User, WikitextContent, CommentStoreComment, integer, NULL, NULL, integer, Status)
#8 /srv/mediawiki/w/includes/page/WikiPage.php(2225): MediaWiki\Storage\PageUpdater->saveRevision(CommentStoreComment, integer)
#9 /srv/mediawiki/w/includes/page/WikiPage.php(2080): WikiPage->doUserEditContent(WikitextContent, User, CommentStoreComment, integer, boolean, array, integer)
#10 /srv/mediawiki/w/includes/EditPage.php(2361): WikiPage->doEditContent(WikitextContent, string, integer, boolean, User, string, array, integer)
#11 /srv/mediawiki/w/includes/EditPage.php(1694): EditPage->internalAttemptSave(array, boolean)
#12 /srv/mediawiki/w/includes/EditPage.php(669): EditPage->attemptSave(array)
#13 /srv/mediawiki/w/includes/actions/EditAction.php(71): EditPage->edit()
#14 /srv/mediawiki/w/includes/actions/SubmitAction.php(38): EditAction->show()
#15 /srv/mediawiki/w/includes/MediaWiki.php(531): SubmitAction->show()
#16 /srv/mediawiki/w/includes/MediaWiki.php(315): MediaWiki->performAction(Article, Title)
#17 /srv/mediawiki/w/includes/MediaWiki.php(913): MediaWiki->performRequest()
#18 /srv/mediawiki/w/includes/MediaWiki.php(546): MediaWiki->main()
#19 /srv/mediawiki/w/index.php(53): MediaWiki->run()
#20 /srv/mediawiki/w/index.php(46): wfIndexMain()
#21 {main}

Though it includes the PortableInfobox extension in the trace, so maybe it's the extension fault?

https://github.com/lkucharczyk/mediawiki-PortableInfobox/blob/master/includes/services/Helpers/PortableInfoboxParsingHelper.php#L33 is the line it points to.

Event Timeline

Assuming this is PortableInfobox extension territory; could be brought up at https://github.com/lkucharczyk/mediawiki-PortableInfobox/issues

@Paladox Adding one line to extensions/PortableInfobox/includes/services/Helpers/PortableInfoboxParsingHelper.php seems to have resolved it for me:

diff
--- /dev/fd/63  2023-12-02 01:20:35.476710065 -0500
+++ PortableInfobox/includes/services/Helpers/PortableInfoboxParsingHelper.php  2023-12-02 01:18:47.790968569 -0500
@@ -30,6 +30,7 @@
                        $parser = MediaWikiServices::getInstance()->getParser();
                        $parser->setTitle( $title );
                        $parserOptions = new \ParserOptions();
+                       $parser->setOptions( $parserOptions );
                        $frame = $parser->getPreprocessor()->newFrame();
 
                        $includeonlyText = $parser->getPreloadText( $templateText, $title, $parserOptions );

I wish I understood more what is going on here, but from the title of your issue it sounds like you were already on to it: parser instances have to be initialized with ParserOptionses now, otherwise a ->getOptions() later will result in the stack trace above, because a return value was not checked for null somewhere.

You can apply this patch to your local copy of PortableInfobox, or else make the one line change as indicated above. Roughly something like this should work:

# 'cd' to your MediaWiki installation, then:
cd extensions/PortableInfoBox
patch -p1 < <(curl -L https://github.com/lkucharczyk/mediawiki-PortableInfobox/pull/46.diff)

Agreed, I'm just in between a rock and a hard place with no PHP 7.4 in the vendor repos and no ability to update past 1.35.x at present. The newer fork may work with 1.35, but there's no obvious tag or branch for that.