bug #2621 Make variable names deterministic (lstrojny)

This PR was merged into the 1.x branch.

Discussion
----------

Make variable names deterministic

Variables should be deterministic to support reproducible builds as outlined in https://github.com/symfony/symfony/issues/25958

Commits
-------

6ab5fe9b Make variable names deterministic
This commit is contained in:
Fabien Potencier
2018-02-07 20:22:14 +01:00
3 changed files with 7 additions and 3 deletions
+3 -1
View File
@@ -25,6 +25,7 @@ class Twig_Compiler implements Twig_CompilerInterface
protected $sourceOffset;
protected $sourceLine;
protected $filename;
private $varNameSalt = 0;
public function __construct(Twig_Environment $env)
{
@@ -78,6 +79,7 @@ class Twig_Compiler implements Twig_CompilerInterface
// source code starts at 1 (as we then increment it when we encounter new lines)
$this->sourceLine = 1;
$this->indentation = $indentation;
$this->varNameSalt = 0;
if ($node instanceof Twig_Node_Module) {
// to be removed in 2.0
@@ -276,7 +278,7 @@ class Twig_Compiler implements Twig_CompilerInterface
public function getVarName()
{
return sprintf('__internal_%s', hash('sha256', uniqid(mt_rand(), true), false));
return sprintf('__internal_%s', hash('sha256', __METHOD__.$this->varNameSalt++));
}
}
+3 -1
View File
@@ -31,6 +31,7 @@ class Twig_Parser implements Twig_ParserInterface
protected $importedSymbols;
protected $traits;
protected $embeddedTemplates = array();
private $varNameSalt = 0;
public function __construct(Twig_Environment $env)
{
@@ -49,7 +50,7 @@ class Twig_Parser implements Twig_ParserInterface
public function getVarName()
{
return sprintf('__internal_%s', hash('sha256', uniqid(mt_rand(), true), false));
return sprintf('__internal_%s', hash('sha256', __METHOD__.$this->varNameSalt++));
}
/**
@@ -98,6 +99,7 @@ class Twig_Parser implements Twig_ParserInterface
$this->blockStack = array();
$this->importedSymbols = array(array());
$this->embeddedTemplates = array();
$this->varNameSalt = 0;
try {
$body = $this->subparse($test, $dropNeedle);
+1 -1
View File
@@ -55,7 +55,7 @@ class Twig_Profiler_NodeVisitor_Profiler extends Twig_BaseNodeVisitor
private function getVarName()
{
return sprintf('__internal_%s', hash('sha256', uniqid(mt_rand(), true), false));
return sprintf('__internal_%s', hash('sha256', __METHOD__));
}
public function getPriority()