diff --git a/changelog/1122.md b/changelog/1122.md new file mode 100644 index 00000000..de32102b --- /dev/null +++ b/changelog/1122.md @@ -0,0 +1 @@ +- Fix syntax error occurring when registering a function plugin that ends with the string 'close' [#1122](https://github.com/smarty-php/smarty/issues/1122) \ No newline at end of file diff --git a/src/Compiler/Template.php b/src/Compiler/Template.php index 237407c6..efc52162 100644 --- a/src/Compiler/Template.php +++ b/src/Compiler/Template.php @@ -1146,12 +1146,12 @@ class Template extends BaseCompiler { } // check if tag is a function - if ($this->smarty->getFunctionHandler($base_tag)) { - if (!isset($this->smarty->security_policy) || $this->smarty->security_policy->isTrustedTag($base_tag, $this)) { + if ($this->smarty->getFunctionHandler($tag)) { + if (!isset($this->smarty->security_policy) || $this->smarty->security_policy->isTrustedTag($tag, $this)) { return (new \Smarty\Compile\PrintExpressionCompiler())->compile( ['nofilter'], // functions are never auto-escaped $this, - ['value' => $this->compileFunctionCall($base_tag, $args, $parameter)] + ['value' => $this->compileFunctionCall($tag, $args, $parameter)] ); } } @@ -1164,16 +1164,16 @@ class Template extends BaseCompiler { } // the default plugin handler is a handler of last resort, it may also handle not specifically registered tags. - if ($callback = $this->getPluginFromDefaultHandler($base_tag, Smarty::PLUGIN_COMPILER)) { + if ($callback = $this->getPluginFromDefaultHandler($tag, Smarty::PLUGIN_COMPILER)) { if (!empty($parameter['modifierlist'])) { - throw new CompilerException('No modifiers allowed on ' . $base_tag); + throw new CompilerException('No modifiers allowed on ' . $tag); } $tagCompiler = new \Smarty\Compile\Tag\BCPluginWrapper($callback); return $tagCompiler->compile($args, $this, $parameter); } if ($this->getPluginFromDefaultHandler($base_tag, Smarty::PLUGIN_FUNCTION)) { - return $this->defaultHandlerFunctionCallCompiler->compile($args, $this, $parameter, $tag, $base_tag); + return $this->defaultHandlerFunctionCallCompiler->compile($args, $this, $parameter, $tag, $tag); } if ($this->getPluginFromDefaultHandler($base_tag, Smarty::PLUGIN_BLOCK)) { diff --git a/tests/UnitTests/SmartyMethodsTests/RegisterFunction/RegisterFunctionTest.php b/tests/UnitTests/SmartyMethodsTests/RegisterFunction/RegisterFunctionTest.php index 81549525..7bfe1a59 100644 --- a/tests/UnitTests/SmartyMethodsTests/RegisterFunction/RegisterFunctionTest.php +++ b/tests/UnitTests/SmartyMethodsTests/RegisterFunction/RegisterFunctionTest.php @@ -192,6 +192,15 @@ class RegisterFunctionTest extends PHPUnit_Smarty ]; } + /** + * test registerPlugin for function name ending in 'close' #1122 + */ + public function testRegisterFunctionEndingInClose() + { + $this->smarty->registerPlugin(Smarty::PLUGIN_FUNCTION, 'window_close', 'myfunction'); + $this->assertEquals('hello world 1', $this->smarty->fetch('eval:{window_close value=1}')); + } + } function myfunction($params, $smarty)