From 772895bea128b7b33865d4530311489836c91b96 Mon Sep 17 00:00:00 2001 From: Elmar Ludwig <elmar.ludwig@uni-osnabrueck.de> Date: Tue, 28 Mar 2023 07:38:26 +0000 Subject: [PATCH] require Closure instead of callable, fixes #2446 Closes #2446 Merge request studip/studip!1669 --- vendor/exTpl/Expression.php | 2 +- vendor/exTpl/Template.php | 5 ++++- vendor/exTpl/template_test.php | 10 +++++++--- 3 files changed, 12 insertions(+), 5 deletions(-) diff --git a/vendor/exTpl/Expression.php b/vendor/exTpl/Expression.php index ced08b59a68..35ea4581001 100644 --- a/vendor/exTpl/Expression.php +++ b/vendor/exTpl/Expression.php @@ -320,7 +320,7 @@ class FunctionExpression implements Expression $arguments[] = $expr->value($context); } - if (is_callable($callable)) { + if ($callable instanceof \Closure) { return call_user_func_array($callable, $arguments); } diff --git a/vendor/exTpl/Template.php b/vendor/exTpl/Template.php index 0be46bf85ff..9d5be04be15 100644 --- a/vendor/exTpl/Template.php +++ b/vendor/exTpl/Template.php @@ -49,7 +49,10 @@ class Template public function __construct($string) { $this->template = new ArrayNode(); - $this->functions = array('count' => 'count', 'strlen' => 'mb_strlen'); + $this->functions = array( + 'count' => function($a) { return count($a); }, + 'strlen' => function($a) { return mb_strlen($a); } + ); self::parseTemplate($this->template, $string, 0); } diff --git a/vendor/exTpl/template_test.php b/vendor/exTpl/template_test.php index b794a820a1b..62aee1c555b 100644 --- a/vendor/exTpl/template_test.php +++ b/vendor/exTpl/template_test.php @@ -168,8 +168,12 @@ class template_test extends PHPUnit\Framework\TestCase public function testFilters() { - $bindings = array('pi' => 3.14159, 'format_number' => 'number_format', 'upper' => 'strtoupper'); - $template = '{pi|format_number(3) ~ ":" ~ "foobar"|upper}'; + $bindings = array( + 'pi' => 3.14159, + 'format' => function($a, $b) { return number_format($a, $b); }, + 'upper' => function($a) { return strtoupper($a); } + ); + $template = '{pi|format(3) ~ ":" ~ "foobar"|upper}'; $expected = '3.142:FOOBAR'; $tmpl_obj = new Template($template); @@ -178,7 +182,7 @@ class template_test extends PHPUnit\Framework\TestCase public function testRawFilter() { - $bindings = array('foo' => '<img>', 'upper' => 'strtoupper'); + $bindings = array('foo' => '<img>', 'upper' => function($a) { return strtoupper($a); }); $template = '{foo}:{foo|upper|raw}'; $expected = '<img>:<IMG>'; $tmpl_obj = new Template($template); -- GitLab