diff --git a/changelog/1074.md b/changelog/1074.md new file mode 100644 index 000000000..845c4b5be --- /dev/null +++ b/changelog/1074.md @@ -0,0 +1 @@ +- Fix PHP backtraces by qualifying/replacing `call_user_func_array` calls [#1074](https://github.com/smarty-php/smarty/issues/1074) \ No newline at end of file diff --git a/src/BlockHandler/BlockPluginWrapper.php b/src/BlockHandler/BlockPluginWrapper.php index 470059456..b6236a67e 100644 --- a/src/BlockHandler/BlockPluginWrapper.php +++ b/src/BlockHandler/BlockPluginWrapper.php @@ -14,6 +14,6 @@ public function __construct($callback, bool $cacheable = true) { } public function handle($params, $content, Template $template, &$repeat) { - return call_user_func_array($this->callback, [$params, $content, &$template, &$repeat]); + return \call_user_func_array($this->callback, [$params, $content, &$template, &$repeat]); } } \ No newline at end of file diff --git a/src/Compiler/Template.php b/src/Compiler/Template.php index de802e1cc..4f798bfd8 100644 --- a/src/Compiler/Template.php +++ b/src/Compiler/Template.php @@ -665,7 +665,7 @@ public function getPluginFromDefaultHandler($tag, $plugin_type) { $script = null; $cacheable = true; - $result = call_user_func_array( + $result = \call_user_func_array( $defaultPluginHandlerFunc, [ $tag, @@ -1281,9 +1281,10 @@ protected function doCompile($_content, $isTemplateSource = false) { } // call post compile callbacks foreach ($this->postCompileCallbacks as $cb) { - $parameter = $cb; - $parameter[0] = $this; - call_user_func_array($cb[0], $parameter); + $callbackFunction = $cb[0]; + $parameters = $cb; + $parameters[0] = $this; + $callbackFunction(...$parameters); } // return compiled code return $this->prefixCompiledCode . $this->parser->retvalue . $this->postfixCompiledCode; diff --git a/src/Extension/CallbackWrapper.php b/src/Extension/CallbackWrapper.php index 827dd78b8..193fc1363 100644 --- a/src/Extension/CallbackWrapper.php +++ b/src/Extension/CallbackWrapper.php @@ -26,7 +26,7 @@ public function __construct(string $modifierName, $callback) { public function handle(...$params) { try { - return call_user_func_array($this->callback, $params); + return ($this->callback)(...$params); } catch (\ArgumentCountError $e) { throw new Exception("Invalid number of arguments to modifier " . $this->modifierName); } diff --git a/src/Runtime/DefaultPluginHandlerRuntime.php b/src/Runtime/DefaultPluginHandlerRuntime.php index ad6ed74d3..f3be85ca6 100644 --- a/src/Runtime/DefaultPluginHandlerRuntime.php +++ b/src/Runtime/DefaultPluginHandlerRuntime.php @@ -26,7 +26,7 @@ public function hasPlugin($tag, $plugin_type): bool { $script = null; $cacheable = null; - return (call_user_func_array( + return (\call_user_func_array( $this->defaultPluginHandler, [ $tag, @@ -54,7 +54,7 @@ public function getCallback($tag, $plugin_type) { $script = null; $cacheable = null; - if (call_user_func_array( + if (\call_user_func_array( $this->defaultPluginHandler, [ $tag, diff --git a/src/Template/Source.php b/src/Template/Source.php index 2ef13a48c..2c2022ee5 100644 --- a/src/Template/Source.php +++ b/src/Template/Source.php @@ -203,7 +203,7 @@ public function getContent() { */ public function _getDefaultTemplate($default_handler) { $_content = $_timestamp = null; - $_return = call_user_func_array( + $_return = \call_user_func_array( $default_handler, [$this->type, $this->name, &$_content, &$_timestamp, $this->smarty] );