Page MenuHomePhabricator

Parameterless templates incorrectly cache dynamic functions
Closed, ResolvedPublic

Description

Parameterless templates seem to always be cached, regardless of the presence of dynamic functions within them.

As a simple example, install the DynamicFunctions extension from https://www.mediawiki.org/wiki/Extension:DynamicFunctions and create a new template, DieRoll, whose contents are simply {{#rand:1|6}}. Now, call {{DieRoll}} repeatedly from the same page. As added proof, add a dummy parameter and observe that the template is no longer cached (as noted on https://bugzilla.wikimedia.org/show_bug.cgi?id=30425) and that DieRoll is now random, as it should be.

If this can't be detected directly, I'd like to suggest adding a new magic work, like DYNAMIC that will force the MediaWiki not to cache a template.

(Tested on 1.21.1, but I assume this hasn't changed recently.)


Version: unspecified
Severity: normal

Details

Reference
bz58929

Event Timeline

bzimport raised the priority of this task from to Medium.Nov 22 2014, 2:24 AM
bzimport set Reference to bz58929.
bzimport added a subscriber: Unknown Object (MLST).

The core now supports this via PPFrame::setVolatile(). Any extensions that still exhibit the problem require a fix to the extension itself.

I've fixed the DynamicFunctions extension. See https://www.mediawiki.org/w/index.php?diff=1175414 for the fix. Note that unless you upgrade your wiki to 1.24, you'll need to cherry-pick https://gerrit.wikimedia.org/r/#/c/99792/ into your codebase for the fix to work.