Linux cesa-www-main 6.1.0-49-cloud-amd64 #1 SMP PREEMPT_DYNAMIC Debian 6.1.174-1 (2026-05-26) x86_64
Apache/2.4.68 (Debian)
Server IP : 10.218.0.2 & Your IP : 216.73.216.28
Domains :
Cant Read [ /etc/named.conf ]
User : www-data
Terminal
Auto Root
Create File
Create Folder
Localroot Suggester
Backdoor Destroyer
Readme
/
usr /
share /
php /
Twig /
NodeVisitor /
Delete
Unzip
Name
Size
Permission
Date
Action
AbstractNodeVisitor.php
1.15
KB
-rw-r--r--
2023-02-08 07:49
EscaperNodeVisitor.php
7.07
KB
-rw-r--r--
2023-02-08 07:49
MacroAutoImportNodeVisitor.php
2.18
KB
-rw-r--r--
2023-02-08 07:49
NodeVisitorInterface.php
1013
B
-rw-r--r--
2023-02-08 07:49
OptimizerNodeVisitor.php
6.44
KB
-rw-r--r--
2023-02-08 07:49
SafeAnalysisNodeVisitor.php
4.82
KB
-rw-r--r--
2023-02-08 07:49
SandboxNodeVisitor.php
4.85
KB
-rw-r--r--
2026-06-02 03:22
Save
Rename
<?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. */ namespace Twig\NodeVisitor; use Twig\Environment; use Twig\Node\CheckSecurityCallNode; use Twig\Node\CheckSecurityNode; use Twig\Node\CheckToStringNode; use Twig\Node\Expression\ArrayExpression; use Twig\Node\Expression\Binary\ConcatBinary; use Twig\Node\Expression\Binary\RangeBinary; use Twig\Node\Expression\FilterExpression; use Twig\Node\Expression\FunctionExpression; use Twig\Node\Expression\GetAttrExpression; use Twig\Node\Expression\NameExpression; use Twig\Node\Expression\Unary\SpreadUnary; use Twig\Node\ModuleNode; use Twig\Node\Node; use Twig\Node\PrintNode; use Twig\Node\SetNode; /** * @author Fabien Potencier <fabien@symfony.com> * * @internal */ final class SandboxNodeVisitor implements NodeVisitorInterface { private $inAModule = false; private $tags; private $filters; private $functions; private $needsToStringWrap = false; public function enterNode(Node $node, Environment $env): Node { if ($node instanceof ModuleNode) { $this->inAModule = true; $this->tags = []; $this->filters = []; $this->functions = []; return $node; } elseif ($this->inAModule) { // look for tags if ($node->getNodeTag() && !isset($this->tags[$node->getNodeTag()])) { $this->tags[$node->getNodeTag()] = $node; } // look for filters if ($node instanceof FilterExpression && !isset($this->filters[$node->getNode('filter')->getAttribute('value')])) { $this->filters[$node->getNode('filter')->getAttribute('value')] = $node; } // look for functions if ($node instanceof FunctionExpression && !isset($this->functions[$node->getAttribute('name')])) { $this->functions[$node->getAttribute('name')] = $node; } // the .. operator is equivalent to the range() function if ($node instanceof RangeBinary && !isset($this->functions['range'])) { $this->functions['range'] = $node; } if ($node instanceof PrintNode) { $this->needsToStringWrap = true; $this->wrapNode($node, 'expr'); } if ($node instanceof SetNode && !$node->getAttribute('capture')) { $this->needsToStringWrap = true; } // wrap outer nodes that can implicitly call __toString() if ($this->needsToStringWrap) { if ($node instanceof ConcatBinary) { $this->wrapNode($node, 'left'); $this->wrapNode($node, 'right'); } if ($node instanceof FilterExpression) { $this->wrapNode($node, 'node'); $this->wrapArrayNode($node, 'arguments'); } if ($node instanceof FunctionExpression) { $this->wrapArrayNode($node, 'arguments'); } } } return $node; } public function leaveNode(Node $node, Environment $env): ?Node { if ($node instanceof ModuleNode) { $this->inAModule = false; $node->setNode('constructor_end', new Node([new CheckSecurityCallNode(), $node->getNode('constructor_end')])); $node->setNode('class_end', new Node([new CheckSecurityNode($this->filters, $this->tags, $this->functions), $node->getNode('class_end')])); } elseif ($this->inAModule) { if ($node instanceof PrintNode || $node instanceof SetNode) { $this->needsToStringWrap = false; } } return $node; } private function wrapNode(Node $node, string $name): void { $expr = $node->getNode($name); if ($expr instanceof NameExpression || $expr instanceof GetAttrExpression) { // Simplify in 4.0 as the spread attribute has been removed there $new = new CheckToStringNode($expr); if ($expr->hasAttribute('spread')) { $new->setAttribute('spread', $expr->getAttribute('spread')); } $node->setNode($name, $new); } elseif ($expr instanceof SpreadUnary) { $this->wrapNode($expr, 'node'); } elseif ($expr instanceof ArrayExpression) { foreach ($expr as $name => $_) { $this->wrapNode($expr, $name); } } } private function wrapArrayNode(Node $node, string $name): void { $args = $node->getNode($name); foreach ($args as $name => $_) { $this->wrapNode($args, $name); } } public function getPriority(): int { return 0; } }