Skip to content

Commit e5da90b

Browse files
author
Nathaniel Catchpole
committed
Issue #3039408 by vijaycs85, WidgetsBurritos, alexpott, phenaproxima, Joseph Zhao, tstoeckler, kfritsche, mikelutz, fabpot: Updating twig/twig to v1.38.0 or v1.38.1 causes fatal error
1 parent 842674f commit e5da90b

File tree

7 files changed

+33
-8
lines changed

7 files changed

+33
-8
lines changed

composer.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@
3232
"symfony/polyfill-iconv": "^1.0",
3333
"symfony/yaml": "~3.4.5",
3434
"typo3/phar-stream-wrapper": "^2.0.1",
35-
"twig/twig": "^1.35.0",
35+
"twig/twig": "^1.38.2",
3636
"doctrine/common": "^2.5",
3737
"doctrine/annotations": "^1.2",
3838
"guzzlehttp/guzzle": "^6.2.1",

lib/Drupal/Core/Template/TwigNodeTrans.php

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22

33
namespace Drupal\Core\Template;
44

5+
use Twig\Node\CheckToStringNode;
6+
57
/**
68
* A class that defines the Twig 'trans' tag for Drupal.
79
*
@@ -113,6 +115,9 @@ protected function compileString(\Twig_Node $body) {
113115
$n = $n->getNode('node');
114116
}
115117

118+
if ($n instanceof CheckToStringNode) {
119+
$n = $n->getNode('expr');
120+
}
116121
$args = $n;
117122

118123
// Support TwigExtension->renderVar() function in chain.
@@ -134,6 +139,9 @@ protected function compileString(\Twig_Node $body) {
134139
}
135140
$args = $args->getNode('node');
136141
}
142+
if ($args instanceof CheckToStringNode) {
143+
$args = $args->getNode('expr');
144+
}
137145
if ($args instanceof \Twig_Node_Expression_GetAttr) {
138146
$argName = [];
139147
// Reuse the incoming expression.

modules/system/tests/modules/twig_extension_test/src/TwigExtension/TestExtension.php

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,9 @@
22

33
namespace Drupal\twig_extension_test\TwigExtension;
44

5+
use Twig\TwigFilter;
6+
use Twig\TwigFunction;
7+
58
/**
69
* A test Twig extension that adds a custom function and a custom filter.
710
*/
@@ -21,7 +24,7 @@ class TestExtension extends \Twig_Extension {
2124
*/
2225
public function getFunctions() {
2326
return [
24-
'testfunc' => new \Twig_Function_Function(['Drupal\twig_extension_test\TwigExtension\TestExtension', 'testFunction']),
27+
'testfunc' => new TwigFunction('testfunc', ['Drupal\twig_extension_test\TwigExtension\TestExtension', 'testFunction']),
2528
];
2629
}
2730

@@ -39,7 +42,7 @@ public function getFunctions() {
3942
*/
4043
public function getFilters() {
4144
return [
42-
'testfilter' => new \Twig_Filter_Function(['Drupal\twig_extension_test\TwigExtension\TestExtension', 'testFilter']),
45+
'testfilter' => new TwigFilter('testfilter', ['Drupal\twig_extension_test\TwigExtension\TestExtension', 'testFilter']),
4346
];
4447
}
4548

modules/system/tests/src/Functional/Theme/TwigRegistryLoaderTest.php

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
namespace Drupal\Tests\system\Functional\Theme;
44

55
use Drupal\Tests\BrowserTestBase;
6+
use Twig\TemplateWrapper;
67

78
/**
89
* Tests Twig registry loader.
@@ -33,7 +34,7 @@ protected function setUp() {
3334
* Checks to see if a value is a Twig template.
3435
*/
3536
public function assertTwigTemplate($value, $message = '', $group = 'Other') {
36-
$this->assertTrue($value instanceof \Twig_Template, $message, $group);
37+
$this->assertTrue($value instanceof TemplateWrapper, $message, $group);
3738
}
3839

3940
/**

modules/system/tests/src/Functional/Theme/TwigSettingsTest.php

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -96,7 +96,12 @@ public function testTwigCacheOverride() {
9696
// theme_test.template_test.html.twig.
9797
$info = $templates->get('theme_test_template_test');
9898
$template_filename = $info['path'] . '/' . $info['template'] . $extension;
99-
$cache_filename = $this->container->get('twig')->getCacheFilename($template_filename);
99+
100+
/** @var \Drupal\Core\Template\TwigEnvironment $twig */
101+
$environment = $this->container->get('twig');
102+
$cache = $environment->getCache();
103+
$class = $environment->getTemplateClass($template_filename);
104+
$cache_filename = $cache->generateKey($template_filename, $class);
100105

101106
// Navigate to the page and make sure the template gets cached.
102107
$this->drupalGet('theme-test/template-test');

modules/system/tests/src/Kernel/Theme/TwigNamespaceTest.php

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
namespace Drupal\Tests\system\Kernel\Theme;
44

55
use Drupal\KernelTests\KernelTestBase;
6+
use Twig\TemplateWrapper;
67

78
/**
89
* Tests Twig namespaces.
@@ -33,7 +34,7 @@ protected function setUp() {
3334
* Checks to see if a value is a twig template.
3435
*/
3536
public function assertTwigTemplate($value, $message = '', $group = 'Other') {
36-
$this->assertTrue($value instanceof \Twig_Template, $message, $group);
37+
$this->assertTrue($value instanceof TemplateWrapper, $message, $group);
3738
}
3839

3940
/**

tests/Drupal/KernelTests/Core/Theme/TwigEnvironmentTest.php

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -163,12 +163,19 @@ public function testCacheFilename() {
163163
$expected = strlen($prefix) + 2 + 2 * TwigPhpStorageCache::SUFFIX_SUBSTRING_LENGTH;
164164
$this->assertEquals($expected, strlen($key));
165165

166-
$original_filename = $environment->getCacheFilename('core/modules/system/templates/container.html.twig');
166+
$template_filename = 'core/modules/system/templates/container.html.twig';
167+
$cache = $environment->getCache();
168+
$class = $environment->getTemplateClass($template_filename);
169+
$original_filename = $cache->generateKey($template_filename, $class);
170+
167171
\Drupal::getContainer()->set('twig', NULL);
168172

169173
\Drupal::service('module_installer')->install(['twig_extension_test']);
170174
$environment = \Drupal::service('twig');
171-
$new_extension_filename = $environment->getCacheFilename('core/modules/system/templates/container.html.twig');
175+
$cache = $environment->getCache();
176+
$class = $environment->getTemplateClass($template_filename);
177+
$new_extension_filename = $cache->generateKey($template_filename, $class);
178+
172179
\Drupal::getContainer()->set('twig', NULL);
173180

174181
$this->assertNotEqual($new_extension_filename, $original_filename);

0 commit comments

Comments
 (0)