diff options
Diffstat (limited to 'library/Smarty/libs/sysplugins/smarty_internal_compile_private_special_variable.php')
-rw-r--r-- | library/Smarty/libs/sysplugins/smarty_internal_compile_private_special_variable.php | 53 |
1 files changed, 31 insertions, 22 deletions
diff --git a/library/Smarty/libs/sysplugins/smarty_internal_compile_private_special_variable.php b/library/Smarty/libs/sysplugins/smarty_internal_compile_private_special_variable.php index 525bc0db7..5a8c54faa 100644 --- a/library/Smarty/libs/sysplugins/smarty_internal_compile_private_special_variable.php +++ b/library/Smarty/libs/sysplugins/smarty_internal_compile_private_special_variable.php @@ -19,44 +19,51 @@ class Smarty_Internal_Compile_Private_Special_Variable extends Smarty_Internal_C /** * Compiles code for the special $smarty variables * - * @param array $args array with attributes from parser - * @param object $compiler compiler object - * @param $parameter + * @param array $args array with attributes from parser + * @param \Smarty_Internal_TemplateCompilerBase $compiler compiler object + * @param $parameter * * @return string compiled code + * @throws \SmartyCompilerException */ - public function compile($args, $compiler, $parameter) + public function compile($args, Smarty_Internal_TemplateCompilerBase $compiler, $parameter) { $_index = preg_split("/\]\[/", substr($parameter, 1, strlen($parameter) - 2)); - $compiled_ref = ' '; - $variable = trim($_index[0], "'"); - if (!isset($compiler->smarty->security_policy) || $compiler->smarty->security_policy->isTrustedSpecialSmartyVar($variable, $compiler)) { + $variable = strtolower($compiler->getId($_index[0])); + if ($variable === false) { + $compiler->trigger_template_error("special \$Smarty variable name index can not be variable", null, true); + } + if (!isset($compiler->smarty->security_policy) || + $compiler->smarty->security_policy->isTrustedSpecialSmartyVar($variable, $compiler) + ) { switch ($variable) { case 'foreach': - $name = trim($_index[1], "'"); - $foreachVar = "'__foreach_{$name}'"; - return "(isset(\$_smarty_tpl->tpl_vars[$foreachVar]->value[{$_index[2]}]) ? \$_smarty_tpl->tpl_vars[$foreachVar]->value[{$_index[2]}] : null)"; case 'section': - return "\$_smarty_tpl->getVariable('smarty')->value$parameter"; + return Smarty_Internal_Compile_Private_ForeachSection::compileSpecialVariable(array(), $compiler, $_index); case 'capture': - return "Smarty::\$_smarty_vars$parameter"; + if (class_exists('Smarty_Internal_Compile_Capture')) { + return Smarty_Internal_Compile_Capture::compileSpecialVariable(array(), $compiler, $_index); + } + return ''; case 'now': return 'time()'; case 'cookies': - if (isset($compiler->smarty->security_policy) && !$compiler->smarty->security_policy->allow_super_globals) { + if (isset($compiler->smarty->security_policy) && + !$compiler->smarty->security_policy->allow_super_globals + ) { $compiler->trigger_template_error("(secure mode) super globals not permitted"); break; } - $compiled_ref = '$_COOKIE'; - break; - + return '$_COOKIE'; case 'get': case 'post': case 'env': case 'server': case 'session': case 'request': - if (isset($compiler->smarty->security_policy) && !$compiler->smarty->security_policy->allow_super_globals) { + if (isset($compiler->smarty->security_policy) && + !$compiler->smarty->security_policy->allow_super_globals + ) { $compiler->trigger_template_error("(secure mode) super globals not permitted"); break; } @@ -78,11 +85,13 @@ class Smarty_Internal_Compile_Private_Special_Variable extends Smarty_Internal_C return "'$_version'"; case 'const': - if (isset($compiler->smarty->security_policy) && !$compiler->smarty->security_policy->allow_constants) { + if (isset($compiler->smarty->security_policy) && + !$compiler->smarty->security_policy->allow_constants + ) { $compiler->trigger_template_error("(secure mode) constants not permitted"); break; } - if (strpos($_index[1], '$') === false && strpos($_index[1], '\'') === false ) { + if (strpos($_index[1], '$') === false && strpos($_index[1], '\'') === false) { return "@constant('{$_index[1]}')"; } else { return "@constant({$_index[1]})"; @@ -90,9 +99,9 @@ class Smarty_Internal_Compile_Private_Special_Variable extends Smarty_Internal_C case 'config': if (isset($_index[2])) { - return "(is_array(\$tmp = \$_smarty_tpl->getConfigVariable($_index[1])) ? \$tmp[$_index[2]] : null)"; + return "(is_array(\$tmp = \$_smarty_tpl->smarty->ext->_config->_getConfigVariable(\$_smarty_tpl, $_index[1])) ? \$tmp[$_index[2]] : null)"; } else { - return "\$_smarty_tpl->getConfigVariable($_index[1])"; + return "\$_smarty_tpl->smarty->ext->_config->_getConfigVariable(\$_smarty_tpl, $_index[1])"; } case 'ldelim': $_ldelim = $compiler->smarty->left_delimiter; @@ -114,7 +123,7 @@ class Smarty_Internal_Compile_Private_Special_Variable extends Smarty_Internal_C $compiled_ref = $compiled_ref . "[$_ind]"; } } + return $compiled_ref; } - return $compiled_ref; } } |