Page MenuHomePhabricator

Error: Call to a member function addModules() on null
Closed, ResolvedPublic

Description

from /srv/mediawiki/1.42/includes/gallery/TraditionalImageGallery.php(71)<br />\n#0 /srv/mediawiki/1.42/extensions/Cargo/includes/formats/CargoGalleryFormat.php(170): TraditionalImageGallery-&gt;toHTML()

Event Timeline

Running MediaWiki 1.42 and php 8.2

Change #1078053 had a related patch set uploaded (by Paladox; author: Paladox):

[mediawiki/extensions/Cargo@master] Fix "Error: Call to a member function addModules() on null"

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

Hi - what version of Cargo? For what it's worth, the current/old code works fine me, on MW 1.43.

Hi - what version of Cargo? For what it's worth, the current/old code works fine me, on MW 1.43.

3.6.1 (0dd6d46) 08:22, 9 September 2024

Okay. That's unfortunate - I just tried, and it it looks like, with MW 1.43, the exact opposite problem happens: getParser() works fine, but using getParserFactory() leads to that "Call to a member function addModules() on null" error. Evidently there was some rearrangement of the setting of ParserOutput between MW 1.42 and 1.43. I don't know what the best solution for this is.

Actually - having looked more at the code, I may have found a fix that works for all MW versions. Could you try putting in the following change?

--- a/includes/formats/CargoGalleryFormat.php
+++ b/includes/formats/CargoGalleryFormat.php
@@ -142,7 +142,12 @@ class CargoGalleryFormat extends CargoDisplayFormat {
                        // User specified something invalid, fallback to default.
                        $gallery = ImageGalleryBase::factory( false );
                }
-               $gallery->setParser( MediaWikiServices::getInstance()->getParser() );
+               $parseWidthParamChecker = new ReflectionMethod( Parser::class, 'parseWidthParam' );
+               if ( !$parseWidthParamChecker->isStatic() ) {
+                       // MW >= 1.43
+                       // This is all due to the change at
+                       // https://phabricator.wikimedia.org/rMW0450b5e4d58387a0d57dc699c2c58f8e780ca44e
+                       $gallery->setParser( MediaWikiServices::getInstance()->getParser() );
+               }

If I works for you on mw 1.42 then it's safe for you to merge.

Change #1078053 merged by jenkins-bot:

[mediawiki/extensions/Cargo@master] Fix "Error: Call to a member function addModules() on null"

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

Yaron_Koren claimed this task.

Okay, hopefully it works across all versions now!

This seems to still occur.

rpc/RunSingleJob.php   Error: Call to a member function addModules() on null</p><p>Backtrace:</p><p>from /srv/mediawiki/1.43/includes/gallery/TraditionalImageGallery.php(72)<br />\\n#0 /srv/mediawiki/1.43/extensions/Cargo/includes/formats/CargoGalleryFormat.php(177): TraditionalImageGallery-&gt;toHTML()<br />\\n#1 /srv/mediawiki/1.43/extensions/Cargo/includes/CargoQueryDisplayer.php(399): CargoGalleryFormat-&gt;display(array, array, array, array)<br />\\n#2 /srv/mediawiki/1.43/extensions/Cargo/includes/parserfunctions/CargoQuery.php(172): CargoQueryDisplayer-&gt;displayQueryResults(CargoGalleryFormat, array)<br />\\n#3 /srv/mediawiki/1.43/includes/parser/Parser.php(3436):

I think MediaWikiServices::getInstance()->getParser() alone doesn't set an output? (I'm not sure what will fix this)

I can't reproduce this problem, unfortunately - although interestingly, for me this code works fine with or without the $gallery->setParser() line. Hopefully you can figure something out...

I'm not entirely sure how to fix it. I see this:

Call to a member function addModules() on null","code":0,"file":"/srv/mediawiki/1.43/includes/gallery/TraditionalImageGallery.php:72","trace":"from /srv/mediawiki/1.43/includes/gallery/TraditionalImageGallery.php(72)\n#0 /srv/mediawiki/1.43/extensions/Cargo/includes/formats/CargoGalleryFormat.php(177): TraditionalImageGallery->toHTML()\n#1 /srv/mediawiki/1.43/extensions/Cargo/includes/CargoQueryDisplayer.php(399): CargoGalleryFormat->display(array, array, array, array)\n#2 /srv/mediawiki/1.43/extensions/Cargo/includes/parserfunctions/CargoQuery.php(172): CargoQueryDisplayer->displayQueryResults(CargoGalleryFormat, array)\n#3 /srv/mediawiki/1.43/includes/parser/Parser.php(3436): CargoQuery::run(MediaWiki\\Parser\\Parser, string, string, string, string, string, string, string, string, string, string, string, string, string, string, string, string)\n#4 /srv/mediawiki/1.43/includes/parser/Parser.php(3117): MediaWiki\\Parser\\Parser->callParserFunction(MediaWiki\\Parser\\PPTemplateFrame_Hash, string, array)\n#5 /srv/mediawiki/1.43/includes/parser/PPFrame_Hash.php(280): MediaWiki\\Parser\\Parser->braceSubstitution(array, MediaWiki\\Parser\\PPTemplateFrame_Hash)\n#6 /srv/mediawiki/1.43/includes/parser/Parser.php(3310): MediaWiki\\Parser\\PPFrame_Hash->expand(MediaWiki\\Parser\\PPNode_Hash_Tree)\n#7 /srv/mediawiki/1.43/includes/parser/PPFrame_Hash.php(280): MediaWiki\\Parser\\Parser->braceSubstitution(array, MediaWiki\\Parser\\PPFrame_Hash)\n#8 /srv/mediawiki/1.43/includes/parser/Parser.php(2951): MediaWiki\\Parser\\PPFrame_Hash->expand(MediaWiki\\Parser\\PPNode_Hash_Tree, int)\n#9 /srv/mediawiki/1.43/includes/parser/Parsoid/Config/DataAccess.php(391): MediaWiki\\Parser\\Parser->replaceVariables(string, MediaWiki\\Parser\\PPFrame_Hash)\n#10 /srv/mediawiki/1.43/vendor/wikimedia/parsoid/src/Wikitext/Wikitext.php(43): MediaWiki\\Parser\\Parsoid\\Config\\DataAccess->preprocessWikitext(MediaWiki\\Parser\\Parsoid\\Config\\PageConfig, MediaWiki\\Parser\\ParserOutput, string)\n#11 /srv/mediawiki/1.43/vendor/wikimedia/parsoid/src/Wt2Html/TT/TemplateHandler.php(1067): Wikimedia\\Parsoid\\Wikitext\\Wikitext::preprocess(Wikimedia\\Parsoid\\Config\\Env, string)\n#12 /srv/mediawiki/1.43/vendor/wikimedia/parsoid/src/Wt2Html/TT/TemplateHandler.php(1110): Wikimedia\\Parsoid\\Wt2Html\\TT\\TemplateHandler->expandTemplate(Wikimedia\\Parsoid\\Wt2Html\\TT\\TemplateEncapsulator)\n#13 /srv/mediawiki/1.43/vendor/wikimedia/parsoid/src/Wt2Html/TT/TemplateHandler.php(1151): Wikimedia\\Parsoid\\Wt2Html\\TT\\TemplateHandler->onTemplate(Wikimedia\\Parsoid\\Tokens\\SelfclosingTagTk)\n#14 /srv/mediawiki/1.43/vendor/wikimedia/parsoid/src/Wt2Html/TT/TokenHandler.php(138): Wikimedia\\Parsoid\\Wt2Html\\TT\\TemplateHandler->onTag(Wikimedia\\Parsoid\\Tokens\\SelfclosingTagTk)\n#15 /srv/mediawiki/1.43/vendor/wikimedia/parsoid/src/Wt2Html/TokenTransformManager.php(113): Wikimedia\\Parsoid\\Wt2Html\\TT\\TokenHandler->process(array)\n#16 /srv/mediawiki/1.43/vendor/wikimedia/parsoid/src/Wt2Html/TokenTransformManager.php(176): Wikimedia\\Parsoid\\Wt2Html\\TokenTransformManager->processChunk(array)\n#17 /srv/mediawiki/1.43/vendor/wikimedia/parsoid/src/Wt2Html/TokenTransformManager.php(174): Wikimedia\\Parsoid\\Wt2Html\\TokenTransformManager->processChunkily(string, array)\n#18 /srv/mediawiki/1.43/vendor/wikimedia/parsoid/src/Wt2Html/TreeBuilder/TreeBuilderStage.php(476): Wikimedia\\Parsoid\\Wt2Html\\TokenTransformManager->processChunkily(string, array)\n#19 [internal function]: Wikimedia\\Parsoid\\Wt2Html\\TreeBuilder\\TreeBuilderStage->processChunkily(string, array)\n#20 /srv/mediawiki/1.43/vendor/wikimedia/parsoid/src/Wt2Html/DOMPostProcessor.php(206): Generator->current()\n#21 /srv/mediawiki/1.43/vendor/wikimedia/parsoid/src/Wt2Html/ParserPipeline.php(164): Wikimedia\\Parsoid\\Wt2Html\\DOMPostProcessor->processChunkily(string, array)\n#22 /srv/mediawiki/1.43/vendor/wikimedia/parsoid/src/Wt2Html/ParserPipelineFactory.php(615): Wikimedia\\Parsoid\\Wt2Html\\ParserPipeline->parseChunkily(string, array)\n#23 /srv/mediawiki/1.43/vendor/wikimedia/parsoid/src/Wikitext/ContentModelHandler.php(173): Wikimedia\\Parsoid\\Wt2Html\\ParserPipelineFactory->parse(string)\n#24 /srv/mediawiki/1.43/vendor/wikimedia/parsoid/src/Parsoid.php(198): Wikimedia\\Parsoid\\Wikitext\\ContentModelHandler->toDOM(Wikimedia\\Parsoid\\Ext\\ParsoidExtensionAPI, null)\n#25 /srv/mediawiki/1.43/vendor/wikimedia/parsoid/src/Parsoid.php(256): Wikimedia\\Parsoid\\Parsoid->parseWikitext(MediaWiki\\Parser\\Parsoid\\Config\\PageConfig, MediaWiki\\Parser\\ParserOutput, array, null)\n#26 /srv/mediawiki/1.43/includes/parser/Parsoid/ParsoidParser.php(162): Wikimedia\\Parsoid\\Parsoid->wikitext2html(MediaWiki\\Parser\\Parsoid\\Config\\PageConfig, array, null, MediaWiki\\Parser\\ParserOutput)\n#27 /srv/mediawiki/1.43/includes/parser/Parsoid/ParsoidParser.php(287): MediaWiki\\Parser\\Parsoid\\ParsoidParser->genParserOutput(MediaWiki\\Parser\\Parsoid\\Config\\PageConfig, MediaWiki\\Parser\\ParserOptions, null)\n#28 /srv/mediawiki/1.43/includes/content/WikitextContentHandler.php(384): MediaWiki\\Parser\\Parsoid\\ParsoidParser->parse(string, MediaWiki\\Title\\Title, MediaWiki\\Parser\\ParserOptions, bool, bool, int, null)\n#29 /srv/mediawiki/1.43/includes/content/ContentHandler.php(1691): MediaWiki\\Content\\WikitextContentHandler->fillParserOutput(MediaWiki\\Content\\WikitextContent, MediaWiki\\Content\\Renderer\\ContentParseParams, MediaWiki\\Parser\\ParserOutput)\n#30 /srv/mediawiki/1.43/includes/content/Renderer/ContentRenderer.php(79): MediaWiki\\Content\\ContentHandler->getParserOutput(MediaWiki\\Content\\WikitextContent, MediaWiki\\Content\\Renderer\\ContentParseParams)\n#31 /srv/mediawiki/1.43/includes/Revision/RenderedRevision.php(263): MediaWiki\\Content\\Renderer\\ContentRenderer->getParserOutput(MediaWiki\\Content\\WikitextContent, MediaWiki\\Title\\Title, MediaWiki\\Revision\\RevisionStoreRecord, MediaWiki\\Parser\\ParserOptions, array)\n#32 /srv/mediawiki/1.43/includes/Revision/RenderedRevision.php(236): MediaWiki\\Revision\\RenderedRevision->getSlotParserOutputUncached(MediaWiki\\Content\\WikitextContent, array)\n#33 /srv/mediawiki/1.43/includes/Revision/RevisionRenderer.php(239): MediaWiki\\Revision\\RenderedRevision->getSlotParserOutput(string, array)\n#34 /srv/mediawiki/1.43/includes/Revision/RevisionRenderer.php(172): MediaWiki\\Revision\\RevisionRenderer->combineSlotOutput(MediaWiki\\Revision\\RenderedRevision, MediaWiki\\Parser\\ParserOptions, array)\n#35 [internal function]: MediaWiki\\Revision\\RevisionRenderer->MediaWiki\\Revision\\{closure}(MediaWiki\\Revision\\RenderedRevision, array)\n#36 /srv/mediawiki/1.43/includes/Revision/RenderedRevision.php(199): call_user_func(Closure, MediaWiki\\Revision\\RenderedRevision, array)\n#37 /srv/mediawiki/1.43/includes/page/ParserOutputAccess.php(454): MediaWiki\\Revision\\RenderedRevision->getRevisionParserOutput()\n#38 /srv/mediawiki/1.43/includes/page/ParserOutputAccess.php(366): MediaWiki\\Page\\ParserOutputAccess->renderRevision(MediaWiki\\Page\\PageStoreRecord, MediaWiki\\Parser\\ParserOptions, MediaWiki\\Revision\\RevisionStoreRecord, int, null)\n#39 /srv/mediawiki/1.43/includes/jobqueue/jobs/ParsoidCachePrewarmJob.php(145): MediaWiki\\Page\\ParserOutputAccess->getParserOutput(MediaWiki\\Page\\PageStoreRecord, MediaWiki\\Parser\\ParserOptions, MediaWiki\\Revision\\RevisionStoreRecord, int)\n#40 /srv/mediawiki/1.43/includes/jobqueue/jobs/ParsoidCachePrewarmJob.php(162): ParsoidCachePrewarmJob->doParsoi

In the jobrunner.

In the jobrunner getOutput could be null.

> $parser = MediaWiki\MediaWikiServices::getInstance()->getParser();

> var_dump($parser->getOutput());
NULL

Change #1119698 had a related patch set uploaded (by Paladox; author: Paladox):

[mediawiki/extensions/Cargo@master] CargoGalleryFormat: fix "Error: Call to a member function addModules() on null take 2

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

Change #1119698 merged by jenkins-bot:

[mediawiki/extensions/Cargo@master] Fix null parser output problem with gallery format in MW 1.43

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