$text = str_replace($matches[0][$i],$replacement,$text);
}
+ // TeX blacklist. MDL-18552
+ $tex_blacklist = array(
+ 'include','def','command','loop','repeat','open','toks','output',
+ 'input','catcode','name','^^',
+ '\every','\errhelp','\errorstopmode','\scrollmode','\nonstopmode',
+ '\batchmode','\read','\write','csname','\newhelp','\uppercase',
+ '\lowercase','\relax','\aftergroup',
+ '\afterassignment','\expandafter','\noexpand','\special'
+ );
+
// <tex> TeX expression </tex>
// or <tex alt="My alternative text to be used instead of the TeX form"> TeX expression </tex>
// or $$ TeX expression $$
$align = "text-top";
$texexp = preg_replace('/^align=top /','',$texexp);
}
+ /// Check $texexp against blacklist (whitelisting could be more complete but also harder to maintain). MDL-18552
+ $invalidcommands = array();
+ foreach($tex_blacklist as $command) {
+ if (stristr($texexp, $command)) { /// Found invalid command. Annotate.
+ $invalidcommands[] = $command;
+ }
+ }
+ if (!empty($invalidcommands)) { /// Invalid commands found. Output error and continue with next TeX element
+ $invalidstr = get_string('invalidtexcommand', 'error', implode(', ', $invalidcommands));
+ $text = str_replace( $matches[0][$i], $invalidstr, $text);
+ continue;
+ }
+ /// Everything is ok, let's process the expression
$md5 = md5($texexp);
if (! $texcache = $DB->get_record("cache_filters", array("filter"=>"tex", "md5key"=>$md5))) {
$texcache->filter = 'tex';
// If not, it obtains the corresponding TeX expression from the cache_tex db table
// and uses mimeTeX to create the image file
- define('NO_MOODLE_COOKIES', true); // Because it interferes with caching
-
require_once("../../config.php");
if (empty($CFG->textfilters)) {
$action = optional_param('action', '', PARAM_ALPHA);
$texexp = optional_param('tex', '', PARAM_RAW);
+ require_login();
+ require_capability('moodle/site:config', get_context_instance(CONTEXT_SYSTEM), $USER->id); /// Required cap to run this. MDL-18552
+
$query = urldecode($_SERVER['QUERY_STRING']);
error_reporting(E_ALL);
$output = '';