Page MenuHomePhabricator

<math>\operatorname{vec}</math> crashes with native MathML
Closed, ResolvedPublicBUG REPORT

Description

How to reproduce: Enable "MathML (experimental; no images)" in Special:Preferences → Apperance → Math. Then preview a page with the contents <math>\operatorname{vec}</math> or visit Commutation_matrix on enwiki. This results in "An error occurred while attempting to preview your changes. [ad5686a6-33b5-4942-8054-f2f58422a7b0] Caught exception of type Error".

I find it interesting that everything works fine if I replace "vec" with something like "foobar" or "x".

Event Timeline

Physikerwelt triaged this task as High priority.

Sorry, probably introduced by one my recent "fixes"

[ZztnZFPb7TnMuQptBVCWxwAAAEg] /w/index.php?action=submit&title=T380184 Error: Call to a member function renderMML() on string

Backtrace:

from /srv/mediawiki/php-master/extensions/Math/src/WikiTexVC/MMLmappings/BaseParsing.php(79)
#0 /srv/mediawiki/php-master/extensions/Math/src/WikiTexVC/MMLmappings/BaseMethods.php(68): MediaWiki\Extension\Math\WikiTexVC\MMLmappings\BaseParsing::accent(MediaWiki\Extension\Math\WikiTexVC\Nodes\Literal, array, array, string, string)
#1 /srv/mediawiki/php-master/extensions/Math/src/WikiTexVC/Nodes/Literal.php(123): MediaWiki\Extension\Math\WikiTexVC\MMLmappings\BaseMethods::checkAndParse(string, array, array, MediaWiki\Extension\Math\WikiTexVC\Nodes\Literal, bool)
#2 /srv/mediawiki/php-master/extensions/Math/src/WikiTexVC/Nodes/TexArray.php(347): MediaWiki\Extension\Math\WikiTexVC\Nodes\Literal->renderMML(array, array)
#3 /srv/mediawiki/php-master/extensions/Math/src/WikiTexVC/Nodes/TexArray.php(305): MediaWiki\Extension\Math\WikiTexVC\Nodes\TexArray->createMMLwithContext(null, MediaWiki\Extension\Math\WikiTexVC\Nodes\Literal, array, array)
#4 /srv/mediawiki/php-master/extensions/Math/src/WikiTexVC/MMLmappings/BaseParsing.php(368): MediaWiki\Extension\Math\WikiTexVC\Nodes\TexArray->renderMML(array, array)
#5 /srv/mediawiki/php-master/extensions/Math/src/WikiTexVC/MMLmappings/BaseMethods.php(70): MediaWiki\Extension\Math\WikiTexVC\MMLmappings\BaseParsing::handleOperatorName(MediaWiki\Extension\Math\WikiTexVC\Nodes\Fun1nb, array, array, string)
#6 /srv/mediawiki/php-master/extensions/Math/src/WikiTexVC/Nodes/TexNode.php(29): MediaWiki\Extension\Math\WikiTexVC\MMLmappings\BaseMethods::checkAndParse(string, array, array, MediaWiki\Extension\Math\WikiTexVC\Nodes\Fun1nb)
#7 /srv/mediawiki/php-master/extensions/Math/src/WikiTexVC/Nodes/Fun1nb.php(18): MediaWiki\Extension\Math\WikiTexVC\Nodes\TexNode->parseToMML(string, array, array)
#8 /srv/mediawiki/php-master/extensions/Math/src/WikiTexVC/Nodes/TexArray.php(347): MediaWiki\Extension\Math\WikiTexVC\Nodes\Fun1nb->renderMML(array, array)
#9 /srv/mediawiki/php-master/extensions/Math/src/WikiTexVC/Nodes/TexArray.php(305): MediaWiki\Extension\Math\WikiTexVC\Nodes\TexArray->createMMLwithContext(null, MediaWiki\Extension\Math\WikiTexVC\Nodes\Fun1nb, array, array)
#10 /srv/mediawiki/php-master/extensions/Math/src/WikiTexVC/Nodes/TexArray.php(347): MediaWiki\Extension\Math\WikiTexVC\Nodes\TexArray->renderMML(array, array)
#11 /srv/mediawiki/php-master/extensions/Math/src/WikiTexVC/Nodes/TexArray.php(305): MediaWiki\Extension\Math\WikiTexVC\Nodes\TexArray->createMMLwithContext(null, MediaWiki\Extension\Math\WikiTexVC\Nodes\TexArray, array, array)
#12 /srv/mediawiki/php-master/extensions/Math/src/InputCheck/LocalChecker.php(122): MediaWiki\Extension\Math\WikiTexVC\Nodes\TexArray->renderMML()
#13 /srv/mediawiki/php-master/includes/libs/objectcache/WANObjectCache.php(1807): MediaWiki\Extension\Math\InputCheck\LocalChecker->runCheck(bool, int, array, null, array)
#14 /srv/mediawiki/php-master/includes/libs/objectcache/WANObjectCache.php(1621): Wikimedia\ObjectCache\WANObjectCache->fetchOrRegenerate(string, int, array, array, array)
#15 /srv/mediawiki/php-master/extensions/Math/src/InputCheck/LocalChecker.php(61): Wikimedia\ObjectCache\WANObjectCache->getWithSetCallback(string, int, array, array)
#16 /srv/mediawiki/php-master/extensions/Math/src/InputCheck/LocalChecker.php(34): MediaWiki\Extension\Math\InputCheck\LocalChecker->run()
#17 /srv/mediawiki/php-master/extensions/Math/src/MathRenderer.php(598): MediaWiki\Extension\Math\InputCheck\LocalChecker->isValid()
#18 /srv/mediawiki/php-master/extensions/Math/src/MathRenderer.php(515): MediaWiki\Extension\Math\MathRenderer->doCheck()
#19 /srv/mediawiki/php-master/extensions/Math/src/HookHandlers/ParserHooksHandler.php(123): MediaWiki\Extension\Math\MathRenderer->checkTeX()
#20 /srv/mediawiki/php-master/extensions/Math/src/HookHandlers/ParserHooksHandler.php(99): MediaWiki\Extension\Math\HookHandlers\ParserHooksHandler->mathPostTagHook(MediaWiki\Extension\Math\MathNativeMML, MediaWiki\Parser\Parser)
#21 [internal function]: MediaWiki\Extension\Math\HookHandlers\ParserHooksHandler->mathTagHook(string, array, MediaWiki\Parser\Parser, MediaWiki\Parser\PPFrame_Hash)
#22 /srv/mediawiki/php-master/includes/parser/Parser.php(4017): call_user_func_array(array, array)
#23 /srv/mediawiki/php-master/includes/parser/PPFrame_Hash.php(362): MediaWiki\Parser\Parser->extensionSubstitution(array, MediaWiki\Parser\PPFrame_Hash, bool)
#24 /srv/mediawiki/php-master/includes/parser/Parser.php(2953): MediaWiki\Parser\PPFrame_Hash->expand(MediaWiki\Parser\PPNode_Hash_Tree, int)
#25 /srv/mediawiki/php-master/includes/parser/Parser.php(1601): MediaWiki\Parser\Parser->replaceVariables(string)
#26 /srv/mediawiki/php-master/includes/parser/Parser.php(703): MediaWiki\Parser\Parser->internalParse(string)
#27 /srv/mediawiki/php-master/includes/content/WikitextContentHandler.php(384): MediaWiki\Parser\Parser->parse(string, MediaWiki\Title\Title, MediaWiki\Parser\ParserOptions, bool, bool, null)
#28 /srv/mediawiki/php-master/includes/content/ContentHandler.php(1692): MediaWiki\Content\WikitextContentHandler->fillParserOutput(MediaWiki\Content\WikitextContent, MediaWiki\Content\Renderer\ContentParseParams, MediaWiki\Parser\ParserOutput)
#29 /srv/mediawiki/php-master/includes/content/Renderer/ContentRenderer.php(79): MediaWiki\Content\ContentHandler->getParserOutput(MediaWiki\Content\WikitextContent, MediaWiki\Content\Renderer\ContentParseParams)
#30 /srv/mediawiki/php-master/includes/Revision/RenderedRevision.php(264): MediaWiki\Content\Renderer\ContentRenderer->getParserOutput(MediaWiki\Content\WikitextContent, MediaWiki\Title\Title, MediaWiki\Revision\MutableRevisionRecord, MediaWiki\Parser\ParserOptions, array)
#31 /srv/mediawiki/php-master/includes/Revision/RenderedRevision.php(236): MediaWiki\Revision\RenderedRevision->getSlotParserOutputUncached(MediaWiki\Content\WikitextContent, array)
#32 /srv/mediawiki/php-master/includes/Revision/RevisionRenderer.php(239): MediaWiki\Revision\RenderedRevision->getSlotParserOutput(string, array)
#33 /srv/mediawiki/php-master/includes/Revision/RevisionRenderer.php(172): MediaWiki\Revision\RevisionRenderer->combineSlotOutput(MediaWiki\Revision\RenderedRevision, MediaWiki\Parser\ParserOptions, array)
#34 [internal function]: MediaWiki\Revision\RevisionRenderer->MediaWiki\Revision\{closure}(MediaWiki\Revision\RenderedRevision, array)
#35 /srv/mediawiki/php-master/includes/Revision/RenderedRevision.php(199): call_user_func(Closure, MediaWiki\Revision\RenderedRevision, array)
#36 /srv/mediawiki/php-master/includes/Storage/DerivedPageDataUpdater.php(1443): MediaWiki\Revision\RenderedRevision->getRevisionParserOutput(array)
#37 /srv/mediawiki/php-master/extensions/SpamBlacklist/includes/Hooks.php(105): MediaWiki\Storage\DerivedPageDataUpdater->getParserOutputForMetaData()
#38 /srv/mediawiki/php-master/includes/HookContainer/HookContainer.php(159): MediaWiki\Extension\SpamBlacklist\Hooks->onEditFilterMergedContent(MediaWiki\Context\DerivativeContext, MediaWiki\Content\WikitextContent, MediaWiki\Status\Status, string, MediaWiki\User\User, bool)
#39 /srv/mediawiki/php-master/includes/HookContainer/HookRunner.php(1523): MediaWiki\HookContainer\HookContainer->run(string, array)
#40 /srv/mediawiki/php-master/includes/editpage/Constraint/EditFilterMergedContentHookConstraint.php(88): MediaWiki\HookContainer\HookRunner->onEditFilterMergedContent(MediaWiki\Context\DerivativeContext, MediaWiki\Content\WikitextContent, MediaWiki\Status\Status, string, MediaWiki\User\User, bool)
#41 /srv/mediawiki/php-master/includes/editpage/Constraint/EditConstraintRunner.php(87): MediaWiki\EditPage\Constraint\EditFilterMergedContentHookConstraint->checkConstraint()
#42 /srv/mediawiki/php-master/includes/editpage/EditPage.php(2284): MediaWiki\EditPage\Constraint\EditConstraintRunner->checkConstraints()
#43 /srv/mediawiki/php-master/includes/editpage/EditPage.php(1798): MediaWiki\EditPage\EditPage->internalAttemptSavePrivate(array, bool, bool)
#44 /srv/mediawiki/php-master/includes/editpage/EditPage.php(729): MediaWiki\EditPage\EditPage->attemptSave(array)
#45 /srv/mediawiki/php-master/includes/actions/EditAction.php(66): MediaWiki\EditPage\EditPage->edit()
#46 /srv/mediawiki/php-master/includes/actions/SubmitAction.php(38): EditAction->show()
#47 /srv/mediawiki/php-master/includes/actions/ActionEntryPoint.php(733): SubmitAction->show()
#48 /srv/mediawiki/php-master/includes/actions/ActionEntryPoint.php(510): MediaWiki\Actions\ActionEntryPoint->performAction(Article, MediaWiki\Title\Title)
#49 /srv/mediawiki/php-master/includes/actions/ActionEntryPoint.php(146): MediaWiki\Actions\ActionEntryPoint->performRequest()
#50 /srv/mediawiki/php-master/includes/MediaWikiEntryPoint.php(200): MediaWiki\Actions\ActionEntryPoint->execute()
#51 /srv/mediawiki/php-master/index.php(58): MediaWiki\MediaWikiEntryPoint->run()
#52 /srv/mediawiki/w/index.php(3): require(string)
#53 {main}

There is already a fix.

https://gerrit.wikimedia.org/r/c/mediawiki/extensions/Math/+/1092348

The issue is that I added the squash literals method that transforms <mrow><mi>v</mi><mi>e</mi><mi>c</mi></mrow> -> <mi>vec</mi>. That was required to get the spacing right.

Unfortunately, the previous code internally removed leading backslashes from commands such that \vec would become vec internally at some point. Now vec was confused with the TeX command \vec

The proposed patch keeps the leading backslashes much longer and removes them only just before rendering. As this is quite a significant change, I marked it as WIP since we need to ensure we don't miss backslashes.

Change #1092348 had a related patch set uploaded (by Physikerwelt; author: Physikerwelt):

[mediawiki/extensions/Math@master] WIP add \ when needed

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

Change #1097393 had a related patch set uploaded (by Physikerwelt; author: Physikerwelt):

[mediawiki/extensions/Math@master] Fix: handling of nullary macros

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

Change #1097465 had a related patch set uploaded (by Physikerwelt; author: Physikerwelt):

[mediawiki/extensions/Math@master] Fix: handling of array

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

Change #1097553 had a related patch set uploaded (by Physikerwelt; author: Physikerwelt):

[mediawiki/extensions/Math@master] Fix: handling of named operators

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

Change #1097555 had a related patch set uploaded (by Physikerwelt; author: Physikerwelt):

[mediawiki/extensions/Math@master] Fix: handling of AMS macros

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

Change #1097557 had a related patch set uploaded (by Physikerwelt; author: Physikerwelt):

[mediawiki/extensions/Math@master] Fix: handling of oint et al

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

Change #1097393 merged by jenkins-bot:

[mediawiki/extensions/Math@master] Fix: handling of nullary macros

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

Change #1097465 merged by jenkins-bot:

[mediawiki/extensions/Math@master] Fix: handling of array

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

Change #1097553 merged by jenkins-bot:

[mediawiki/extensions/Math@master] Fix: handling of named operators

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

Change #1097840 had a related patch set uploaded (by Physikerwelt; author: Physikerwelt):

[mediawiki/extensions/Math@wmf/1.44.0-wmf.5] Fix: handling of nullary macros

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

Change #1097555 merged by jenkins-bot:

[mediawiki/extensions/Math@master] Fix: handling of AMS macros

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

Change #1097557 merged by jenkins-bot:

[mediawiki/extensions/Math@master] Fix: handling of oint et al

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

Mentioned in SAL (#wikimedia-releng) [2024-11-26T10:12:42Z] <hashar> Fast forwarded mediawiki/extensions/Math wmf/1.44.0-wmf.5 branch from 0458ea16 to d5076423. That is to apply hotfixes that merged after the branch has been cut # T375664 | T380184

Physikerwelt added a subscriber: hashar.

Thank you @hashar and @Andreg-p for your help, and sorry again for the chaos.

Everything is now merged correctly and the rendering looks good

image.png (168×185 px, 11 KB)

Thank you @Physikerwelt for the notification on the the train blocker and to have confirmed the resolution! 🏆

Change #1097840 abandoned by Physikerwelt:

[mediawiki/extensions/Math@wmf/1.44.0-wmf.5] Fix: handling of nullary macros

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

Change #1105066 had a related patch set uploaded (by Krinkle; author: Physikerwelt):

[mediawiki/extensions/Math@REL1_43] Fix: handling of nullary macros

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

Change #1105067 had a related patch set uploaded (by Krinkle; author: Physikerwelt):

[mediawiki/extensions/Math@REL1_43] Fix: handling of array

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

Change #1105068 had a related patch set uploaded (by Krinkle; author: Physikerwelt):

[mediawiki/extensions/Math@REL1_43] Fix: handling of named operators

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

Change #1105069 had a related patch set uploaded (by Krinkle; author: Physikerwelt):

[mediawiki/extensions/Math@REL1_43] Fix: handling of AMS macros

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

Change #1105070 had a related patch set uploaded (by Krinkle; author: Physikerwelt):

[mediawiki/extensions/Math@REL1_43] Fix: handling of oint et al

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

Change #1105066 merged by jenkins-bot:

[mediawiki/extensions/Math@REL1_43] Fix: handling of nullary macros

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

Change #1105067 merged by jenkins-bot:

[mediawiki/extensions/Math@REL1_43] Fix: handling of array

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

Change #1105068 merged by jenkins-bot:

[mediawiki/extensions/Math@REL1_43] Fix: handling of named operators

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

Change #1105069 merged by jenkins-bot:

[mediawiki/extensions/Math@REL1_43] Fix: handling of AMS macros

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

Change #1105070 merged by jenkins-bot:

[mediawiki/extensions/Math@REL1_43] Fix: handling of oint et al

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