1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192
|
From: Dries Vints <dries@vints.io>
Date: Mon, 6 Dec 2021 18:14:03 +0100
Subject: Fix parent call
Origin: https://github.com/laravel/framework/commit/b8174169b1807f36de1837751599e2828ceddb9b
Applied-Upstream: 6.20.42
---
src/Illuminate/View/Compilers/Compiler.php | 2 +-
.../View/Compilers/Concerns/CompilesLayouts.php | 6 ++---
src/Illuminate/View/Concerns/ManagesLayouts.php | 26 +++++++++++++++++++++-
tests/View/ViewBladeCompilerTest.php | 20 ++++++++---------
4 files changed, 39 insertions(+), 15 deletions(-)
diff --git a/src/Illuminate/View/Compilers/Compiler.php b/src/Illuminate/View/Compilers/Compiler.php
index 08648ad..d2a9f26 100755
--- a/src/Illuminate/View/Compilers/Compiler.php
+++ b/src/Illuminate/View/Compilers/Compiler.php
@@ -48,7 +48,7 @@ abstract class Compiler
*/
public function getCompiledPath($path)
{
- return $this->cachePath.'/'.sha1($path).'.php';
+ return $this->cachePath.'/'.sha1('v2'.$path).'.php';
}
/**
diff --git a/src/Illuminate/View/Compilers/Concerns/CompilesLayouts.php b/src/Illuminate/View/Compilers/Concerns/CompilesLayouts.php
index aaef617..fc6a63a 100644
--- a/src/Illuminate/View/Compilers/Concerns/CompilesLayouts.php
+++ b/src/Illuminate/View/Compilers/Concerns/CompilesLayouts.php
@@ -2,8 +2,6 @@
namespace Illuminate\View\Compilers\Concerns;
-use Illuminate\View\Factory as ViewFactory;
-
trait CompilesLayouts
{
/**
@@ -50,7 +48,9 @@ trait CompilesLayouts
*/
protected function compileParent()
{
- return ViewFactory::parentPlaceholder($this->lastSection ?: '');
+ $escapedLastSection = strtr($this->lastSection, ['\\' => '\\\\', "'" => "\\'"]);
+
+ return "<?php echo \Illuminate\View\Factory::parentPlaceholder('{$escapedLastSection}'); ?>";
}
/**
diff --git a/src/Illuminate/View/Concerns/ManagesLayouts.php b/src/Illuminate/View/Concerns/ManagesLayouts.php
index 29d7155..82fb77b 100644
--- a/src/Illuminate/View/Concerns/ManagesLayouts.php
+++ b/src/Illuminate/View/Concerns/ManagesLayouts.php
@@ -3,6 +3,7 @@
namespace Illuminate\View\Concerns;
use Illuminate\Contracts\View\View;
+use Illuminate\Support\Str;
use InvalidArgumentException;
trait ManagesLayouts
@@ -28,6 +29,13 @@ trait ManagesLayouts
*/
protected static $parentPlaceholder = [];
+ /**
+ * The parent placeholder salt for the request.
+ *
+ * @var string
+ */
+ protected static $parentPlaceholderSalt;
+
/**
* Start injecting content into a section.
*
@@ -168,12 +176,28 @@ trait ManagesLayouts
public static function parentPlaceholder($section = '')
{
if (! isset(static::$parentPlaceholder[$section])) {
- static::$parentPlaceholder[$section] = '##parent-placeholder-'.sha1($section).'##';
+ $salt = static::parentPlaceholderSalt();
+
+ static::$parentPlaceholder[$section] = '##parent-placeholder-'.sha1($salt.$section).'##';
}
return static::$parentPlaceholder[$section];
}
+ /**
+ * Get the parent placeholder salt.
+ *
+ * @return string
+ */
+ protected static function parentPlaceholderSalt()
+ {
+ if (! static::$parentPlaceholderSalt) {
+ return static::$parentPlaceholderSalt = Str::random(40);
+ }
+
+ return static::$parentPlaceholderSalt;
+ }
+
/**
* Check if section exists.
*
diff --git a/tests/View/ViewBladeCompilerTest.php b/tests/View/ViewBladeCompilerTest.php
index fd61b8c..eddf9e2 100644
--- a/tests/View/ViewBladeCompilerTest.php
+++ b/tests/View/ViewBladeCompilerTest.php
@@ -18,7 +18,7 @@ class ViewBladeCompilerTest extends TestCase
public function testIsExpiredReturnsTrueIfCompiledFileDoesntExist()
{
$compiler = new BladeCompiler($files = $this->getFiles(), __DIR__);
- $files->shouldReceive('exists')->once()->with(__DIR__.'/'.sha1('foo').'.php')->andReturn(false);
+ $files->shouldReceive('exists')->once()->with(__DIR__.'/'.sha1('v2foo').'.php')->andReturn(false);
$this->assertTrue($compiler->isExpired('foo'));
}
@@ -33,23 +33,23 @@ class ViewBladeCompilerTest extends TestCase
public function testIsExpiredReturnsTrueWhenModificationTimesWarrant()
{
$compiler = new BladeCompiler($files = $this->getFiles(), __DIR__);
- $files->shouldReceive('exists')->once()->with(__DIR__.'/'.sha1('foo').'.php')->andReturn(true);
+ $files->shouldReceive('exists')->once()->with(__DIR__.'/'.sha1('v2foo').'.php')->andReturn(true);
$files->shouldReceive('lastModified')->once()->with('foo')->andReturn(100);
- $files->shouldReceive('lastModified')->once()->with(__DIR__.'/'.sha1('foo').'.php')->andReturn(0);
+ $files->shouldReceive('lastModified')->once()->with(__DIR__.'/'.sha1('v2foo').'.php')->andReturn(0);
$this->assertTrue($compiler->isExpired('foo'));
}
public function testCompilePathIsProperlyCreated()
{
$compiler = new BladeCompiler($this->getFiles(), __DIR__);
- $this->assertEquals(__DIR__.'/'.sha1('foo').'.php', $compiler->getCompiledPath('foo'));
+ $this->assertEquals(__DIR__.'/'.sha1('v2foo').'.php', $compiler->getCompiledPath('foo'));
}
public function testCompileCompilesFileAndReturnsContents()
{
$compiler = new BladeCompiler($files = $this->getFiles(), __DIR__);
$files->shouldReceive('get')->once()->with('foo')->andReturn('Hello World');
- $files->shouldReceive('put')->once()->with(__DIR__.'/'.sha1('foo').'.php', 'Hello World<?php /**PATH foo ENDPATH**/ ?>');
+ $files->shouldReceive('put')->once()->with(__DIR__.'/'.sha1('v2foo').'.php', 'Hello World<?php /**PATH foo ENDPATH**/ ?>');
$compiler->compile('foo');
}
@@ -57,7 +57,7 @@ class ViewBladeCompilerTest extends TestCase
{
$compiler = new BladeCompiler($files = $this->getFiles(), __DIR__);
$files->shouldReceive('get')->once()->with('foo')->andReturn('Hello World');
- $files->shouldReceive('put')->once()->with(__DIR__.'/'.sha1('foo').'.php', 'Hello World<?php /**PATH foo ENDPATH**/ ?>');
+ $files->shouldReceive('put')->once()->with(__DIR__.'/'.sha1('v2foo').'.php', 'Hello World<?php /**PATH foo ENDPATH**/ ?>');
$compiler->compile('foo');
$this->assertSame('foo', $compiler->getPath());
}
@@ -73,7 +73,7 @@ class ViewBladeCompilerTest extends TestCase
{
$compiler = new BladeCompiler($files = $this->getFiles(), __DIR__);
$files->shouldReceive('get')->once()->with('foo')->andReturn('Hello World');
- $files->shouldReceive('put')->once()->with(__DIR__.'/'.sha1('foo').'.php', 'Hello World<?php /**PATH foo ENDPATH**/ ?>');
+ $files->shouldReceive('put')->once()->with(__DIR__.'/'.sha1('v2foo').'.php', 'Hello World<?php /**PATH foo ENDPATH**/ ?>');
// set path before compilation
$compiler->setPath('foo');
// trigger compilation with $path
@@ -103,7 +103,7 @@ class ViewBladeCompilerTest extends TestCase
{
$compiler = new BladeCompiler($files = $this->getFiles(), __DIR__);
$files->shouldReceive('get')->once()->with('foo')->andReturn($content);
- $files->shouldReceive('put')->once()->with(__DIR__.'/'.sha1('foo').'.php', $compiled);
+ $files->shouldReceive('put')->once()->with(__DIR__.'/'.sha1('v2foo').'.php', $compiled);
$compiler->compile('foo');
}
@@ -157,7 +157,7 @@ class ViewBladeCompilerTest extends TestCase
{
$compiler = new BladeCompiler($files = $this->getFiles(), __DIR__);
$files->shouldReceive('get')->once()->with('')->andReturn('Hello World');
- $files->shouldReceive('put')->once()->with(__DIR__.'/'.sha1('').'.php', 'Hello World');
+ $files->shouldReceive('put')->once()->with(__DIR__.'/'.sha1('v2').'.php', 'Hello World');
$compiler->setPath('');
$compiler->compile();
}
@@ -166,7 +166,7 @@ class ViewBladeCompilerTest extends TestCase
{
$compiler = new BladeCompiler($files = $this->getFiles(), __DIR__);
$files->shouldReceive('get')->once()->with(null)->andReturn('Hello World');
- $files->shouldReceive('put')->once()->with(__DIR__.'/'.sha1(null).'.php', 'Hello World');
+ $files->shouldReceive('put')->once()->with(__DIR__.'/'.sha1('v2').'.php', 'Hello World');
$compiler->setPath(null);
$compiler->compile();
}
|