summaryrefslogtreecommitdiff
path: root/inc/lib/Twig/Node/CheckSecurity.php
diff options
context:
space:
mode:
authorBenjamin Southall <applemansigloo@gmail.com>2019-02-26 10:11:12 +1000
committerBenjamin Southall <applemansigloo@gmail.com>2019-02-26 10:11:12 +1000
commitf79395851b044689567e0e6c9504acbcaa742782 (patch)
treeee539aee9ffa90e8accd6f130b30a8ebed7a232e /inc/lib/Twig/Node/CheckSecurity.php
parent28f32baf0125ca5085266e73dc5071e5814d8e3b (diff)
Twig update to latest Twig 1.x legacy as per vichan
Diffstat (limited to 'inc/lib/Twig/Node/CheckSecurity.php')
-rw-r--r--inc/lib/Twig/Node/CheckSecurity.php80
1 files changed, 80 insertions, 0 deletions
diff --git a/inc/lib/Twig/Node/CheckSecurity.php b/inc/lib/Twig/Node/CheckSecurity.php
new file mode 100644
index 00000000..7258acb6
--- /dev/null
+++ b/inc/lib/Twig/Node/CheckSecurity.php
@@ -0,0 +1,80 @@
+<?php
+
+/*
+ * This file is part of Twig.
+ *
+ * (c) Fabien Potencier
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+/**
+ * @author Fabien Potencier <fabien@symfony.com>
+ */
+class Twig_Node_CheckSecurity extends Twig_Node
+{
+ protected $usedFilters;
+ protected $usedTags;
+ protected $usedFunctions;
+
+ public function __construct(array $usedFilters, array $usedTags, array $usedFunctions)
+ {
+ $this->usedFilters = $usedFilters;
+ $this->usedTags = $usedTags;
+ $this->usedFunctions = $usedFunctions;
+
+ parent::__construct();
+ }
+
+ public function compile(Twig_Compiler $compiler)
+ {
+ $tags = $filters = $functions = array();
+ foreach (array('tags', 'filters', 'functions') as $type) {
+ foreach ($this->{'used'.ucfirst($type)} as $name => $node) {
+ if ($node instanceof Twig_Node) {
+ ${$type}[$name] = $node->getTemplateLine();
+ } else {
+ ${$type}[$node] = null;
+ }
+ }
+ }
+
+ $compiler
+ ->write('$tags = ')->repr(array_filter($tags))->raw(";\n")
+ ->write('$filters = ')->repr(array_filter($filters))->raw(";\n")
+ ->write('$functions = ')->repr(array_filter($functions))->raw(";\n\n")
+ ->write("try {\n")
+ ->indent()
+ ->write("\$this->env->getExtension('Twig_Extension_Sandbox')->checkSecurity(\n")
+ ->indent()
+ ->write(!$tags ? "array(),\n" : "array('".implode("', '", array_keys($tags))."'),\n")
+ ->write(!$filters ? "array(),\n" : "array('".implode("', '", array_keys($filters))."'),\n")
+ ->write(!$functions ? "array()\n" : "array('".implode("', '", array_keys($functions))."')\n")
+ ->outdent()
+ ->write(");\n")
+ ->outdent()
+ ->write("} catch (Twig_Sandbox_SecurityError \$e) {\n")
+ ->indent()
+ ->write("\$e->setSourceContext(\$this->getSourceContext());\n\n")
+ ->write("if (\$e instanceof Twig_Sandbox_SecurityNotAllowedTagError && isset(\$tags[\$e->getTagName()])) {\n")
+ ->indent()
+ ->write("\$e->setTemplateLine(\$tags[\$e->getTagName()]);\n")
+ ->outdent()
+ ->write("} elseif (\$e instanceof Twig_Sandbox_SecurityNotAllowedFilterError && isset(\$filters[\$e->getFilterName()])) {\n")
+ ->indent()
+ ->write("\$e->setTemplateLine(\$filters[\$e->getFilterName()]);\n")
+ ->outdent()
+ ->write("} elseif (\$e instanceof Twig_Sandbox_SecurityNotAllowedFunctionError && isset(\$functions[\$e->getFunctionName()])) {\n")
+ ->indent()
+ ->write("\$e->setTemplateLine(\$functions[\$e->getFunctionName()]);\n")
+ ->outdent()
+ ->write("}\n\n")
+ ->write("throw \$e;\n")
+ ->outdent()
+ ->write("}\n\n")
+ ;
+ }
+}
+
+class_alias('Twig_Node_CheckSecurity', 'Twig\Node\CheckSecurityNode', false);