diff --git a/Smarty_Compiler.class.php b/Smarty_Compiler.class.php index d4911bd2..47cd60cb 100644 --- a/Smarty_Compiler.class.php +++ b/Smarty_Compiler.class.php @@ -486,11 +486,14 @@ class Smarty_Compiler extends Smarty { for ($i = 0; $i < count($tokens); $i++) { - if($this->security && $tokens[$i+1] == '(' && !in_array($tokens[$i],$this->security_settings["ALLOW_IF_FUNCS"])) { + if($this->security + && $tokens[$i+1] == '(' + && !preg_match("|[^a-zA-Z_-]+|",$tokens[$i]) + && !in_array($tokens[$i],array('eq','ne','neq','lt','le','lte','gt','ge','gte','and','or','not','mod','is')) + && !in_array($tokens[$i],$this->security_settings["ALLOW_IF_FUNCS"])) { $this->_syntax_error("(secure mode) '".$tokens[$i]."' not allowed in if statement"); } - $token = &$tokens[$i]; switch ($token) { case 'eq': diff --git a/libs/Smarty_Compiler.class.php b/libs/Smarty_Compiler.class.php index d4911bd2..47cd60cb 100644 --- a/libs/Smarty_Compiler.class.php +++ b/libs/Smarty_Compiler.class.php @@ -486,11 +486,14 @@ class Smarty_Compiler extends Smarty { for ($i = 0; $i < count($tokens); $i++) { - if($this->security && $tokens[$i+1] == '(' && !in_array($tokens[$i],$this->security_settings["ALLOW_IF_FUNCS"])) { + if($this->security + && $tokens[$i+1] == '(' + && !preg_match("|[^a-zA-Z_-]+|",$tokens[$i]) + && !in_array($tokens[$i],array('eq','ne','neq','lt','le','lte','gt','ge','gte','and','or','not','mod','is')) + && !in_array($tokens[$i],$this->security_settings["ALLOW_IF_FUNCS"])) { $this->_syntax_error("(secure mode) '".$tokens[$i]."' not allowed in if statement"); } - $token = &$tokens[$i]; switch ($token) { case 'eq':