Twig: Drupal 8.6.10 Twig 1.38 fatal error

Created on 12 Mar 2019  路  18Comments  路  Source: twigphp/Twig

Declaration of Twig_Extensions_TokenParser_Trans::parse() must be compatible with TwigTokenParserTokenParserInterface::parse(TwigToken $token) in [...]/vendor/twig/extensions/lib/Twig/Extensions/TokenParser/Trans.php on line 86

Solution :
composer require twig/twig 1.37.1

Most helpful comment

I've proposed a patch in the Drupal issue queue.

All 18 comments

fixed in 1.38.1 and 2.7.1 (which I've just released).

@fabpot we are still facing the issue in 1.38.1. Please refer at https://www.drupal.org/project/drupal/issues/3039408#comment-13018483

Uncaught PHP Exception Twig\Error\SyntaxError: "An exception has been thrown during the compilation of a template ("Attribute "name" does not exist for Node "Twig\Node\CheckToStringNode".") in "core/themes/bartik/templates/block--system-menu-block.html.twig"." at vendor/twig/twig/src/Environment.php line 797

Indeed, there is no 'name' attribute on the node. I would need more information to be able to debug as it seems to be Drupal specific. Can you change line 797 in Environment.php with just throw $e to get the stack trace?

Do you have the sandbox activated on all templates in Drupal?

@fabpot by the look of it, it is activated in the core and causing the issue on all the sites.

Well, in the case of Drupal, it looks like the compilation of TwigNodeTrans is doing weird things on the tree of nodes inside the tag, and their logic does not work well for the new CheckToStringNode added for the security fix, as they make some (wrong) assumptions about what the nodes inside the tag look like.
Note that it might not be the only kind of change breaking that logic.

I'm not able to reproduce the error locally, so it might be related to a Drupal module I don't have (or a feature not activated by default).

I changed line 797 in Environment.php (using Bootstrap subtheme) from:
throw new SyntaxError(sprintf('An exception has been thrown during the compilation of a template ("%s").', $e->getMessage()), -1, $source, $e);

To:
throw new SyntaxError($e);

... and got this. Please let me know if you're looking for something else:
Fatal error: Method LogicException::__toString() must not throw an exception, caught Twig\Error\SyntaxError: in /app/vendor/twig/twig/src/Environment.php on line 797 Call Stack: 0.0000 361160 1. {main}() /app/web/index.php:0 0.0007 482136 2. Drupal\Core\DrupalKernel->handle() /app/web/index.php:19 0.0041 1654960 3. Stack\StackedHttpKernel->handle() /app/web/core/lib/Drupal/Core/DrupalKernel.php:693 0.0041 1654960 4. Drupal\Core\StackMiddleware\NegotiationMiddleware->handle() /app/vendor/stack/builder/src/Stack/StackedHttpKernel.php:23 0.0042 1655656 5. Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle() /app/web/core/lib/Drupal/Core/StackMiddleware/NegotiationMiddleware.php:52 0.0042 1655656 6. Drupal\page_cache\StackMiddleware\PageCache->handle() /app/web/core/lib/Drupal/Core/StackMiddleware/ReverseProxyMiddleware.php:47 0.0042 1658336 7. Drupal\page_cache\StackMiddleware\PageCache->pass() /app/web/core/modules/page_cache/src/StackMiddleware/PageCache.php:78 0.0042 1658336 8. Drupal\Core\StackMiddleware\KernelPreHandle->handle() /app/web/core/modules/page_cache/src/StackMiddleware/PageCache.php:99 0.0055 2061784 9. Drupal\Core\StackMiddleware\Session->handle() /app/web/core/lib/Drupal/Core/StackMiddleware/KernelPreHandle.php:47 0.0064 2163832 10. Symfony\Component\HttpKernel\HttpKernel->handle() /app/web/core/lib/Drupal/Core/StackMiddleware/Session.php:57 0.0064 2164888 11. Symfony\Component\HttpKernel\HttpKernel->handleRaw() /app/vendor/symfony/http-kernel/HttpKernel.php:68 0.0183 4719680 12. Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch() /app/vendor/symfony/http-kernel/HttpKernel.php:156 0.0186 4731152 13. call_user_func:{/app/web/core/lib/Drupal/Component/EventDispatcher/ContainerAwareEventDispatcher.php:111}() /app/web/core/lib/Drupal/Component/EventDispatcher/ContainerAwareEventDispatcher.php:111 0.0186 4731152 14. Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray() /app/web/core/lib/Drupal/Component/EventDispatcher/ContainerAwareEventDispatcher.php:111 0.0187 4738288 15. Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse() /app/web/core/lib/Drupal/Core/EventSubscriber/MainContentViewSubscriber.php:90 0.0187 4738288 16. Drupal\Core\Render\MainContent\HtmlRenderer->prepare() /app/web/core/lib/Drupal/Core/Render/MainContent/HtmlRenderer.php:117 0.0188 4809248 17. Drupal\Core\Render\Renderer->executeInRenderContext() /app/web/core/lib/Drupal/Core/Render/MainContent/HtmlRenderer.php:227 0.0188 4809248 18. Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() /app/web/core/lib/Drupal/Core/Render/Renderer.php:582 0.0188 4810320 19. Drupal\Core\Render\Renderer->render() /app/web/core/lib/Drupal/Core/Render/MainContent/HtmlRenderer.php:226 0.0188 4810320 20. Drupal\Core\Render\Renderer->doRender() /app/web/core/lib/Drupal/Core/Render/Renderer.php:195 0.0593 9940080 21. Drupal\Core\Render\Renderer->doRender() /app/web/core/lib/Drupal/Core/Render/Renderer.php:450 0.0595 9942736 22. Drupal\Core\Theme\ThemeManager->render() /app/web/core/lib/Drupal/Core/Render/Renderer.php:437 0.0608 10011392 23. twig_render_template() /app/web/core/lib/Drupal/Core/Theme/ThemeManager.php:384 0.0630 10525096 24. __TwigTemplate_532bd15a1ee96b91d410ad8b8f05717c156aa86733c3c964a524ef7b00f7f6db->render() /app/web/core/themes/engines/twig/twig.engine:64 0.0630 10541560 25. __TwigTemplate_532bd15a1ee96b91d410ad8b8f05717c156aa86733c3c964a524ef7b00f7f6db->display() /app/vendor/twig/twig/src/Template.php:406 0.0630 10541672 26. __TwigTemplate_532bd15a1ee96b91d410ad8b8f05717c156aa86733c3c964a524ef7b00f7f6db->displayWithErrorHandling() /app/vendor/twig/twig/src/Template.php:398 0.0630 10541672 27. __TwigTemplate_532bd15a1ee96b91d410ad8b8f05717c156aa86733c3c964a524ef7b00f7f6db->doDisplay() /app/vendor/twig/twig/src/Template.php:427 0.0634 10550680 28. Drupal\Core\Template\TwigExtension->escapeFilter() /app/web/sites/default/files/php/twig/5c87e1ef67f65_views-view.html.twig__QpNJ52gFOeDaO85dDCqOWwfs/MBZU0N6ZwO4USHTYXlviOXbK68ZbvSA6RcfKlOMe2cA.php:126 0.0634 10551080 29. Drupal\Core\Render\Renderer->render() /app/web/core/lib/Drupal/Core/Template/TwigExtension.php:490 0.0634 10551080 30. Drupal\Core\Render\Renderer->doRender() /app/web/core/lib/Drupal/Core/Render/Renderer.php:195 0.0634 10552064 31. Drupal\Core\Render\Renderer->doRender() /app/web/core/lib/Drupal/Core/Render/Renderer.php:450 0.0634 10553080 32. Drupal\Core\Theme\ThemeManager->render() /app/web/core/lib/Drupal/Core/Render/Renderer.php:437 0.0638 10562008 33. twig_render_template() /app/web/core/lib/Drupal/Core/Theme/ThemeManager.php:384 0.0639 10564416 34. __TwigTemplate_b9d0525dc2fa6d439aa7b0e04d9fba5e068aae4a3e15afa8eb9cbc8c797dc620->render() /app/web/core/themes/engines/twig/twig.engine:64 0.0639 10580880 35. __TwigTemplate_b9d0525dc2fa6d439aa7b0e04d9fba5e068aae4a3e15afa8eb9cbc8c797dc620->display() /app/vendor/twig/twig/src/Template.php:406 0.0639 10580936 36. __TwigTemplate_b9d0525dc2fa6d439aa7b0e04d9fba5e068aae4a3e15afa8eb9cbc8c797dc620->displayWithErrorHandling() /app/vendor/twig/twig/src/Template.php:398 0.0639 10580936 37. __TwigTemplate_b9d0525dc2fa6d439aa7b0e04d9fba5e068aae4a3e15afa8eb9cbc8c797dc620->doDisplay() /app/vendor/twig/twig/src/Template.php:427 0.0639 10583480 38. Drupal\Core\Template\TwigExtension->escapeFilter() /app/web/sites/default/files/php/twig/5c87e1ef67f65_views-view-unformatted.ht_Jxd7ujOsU2hzfskCKf_9ywREt/UTTZf2iqGoK6sfqkd0d-4HfnVUmojQqE7GfhAoBYtLM.php:76 0.0639 10583880 39. Drupal\Core\Render\Renderer->render() /app/web/core/lib/Drupal/Core/Template/TwigExtension.php:490 0.0639 10583880 40. Drupal\Core\Render\Renderer->doRender() /app/web/core/lib/Drupal/Core/Render/Renderer.php:195 0.0820 12679872 41. Drupal\Core\Theme\ThemeManager->render() /app/web/core/lib/Drupal/Core/Render/Renderer.php:437 0.0857 12759904 42. twig_render_template() /app/web/core/lib/Drupal/Core/Theme/ThemeManager.php:384 0.0857 12759904 43. Drupal\Core\Template\TwigEnvironment->loadTemplate() /app/web/core/themes/engines/twig/twig.engine:64 0.0857 12760032 44. Drupal\Core\Template\TwigEnvironment->loadClass() /app/vendor/twig/twig/src/Environment.php:446 0.0858 12769520 45. Drupal\Core\Template\TwigEnvironment->compileSource() /app/vendor/twig/twig/src/Environment.php:482

Well, this now reports an issue in your patch, as you pass an object as the exception message, which breaks.

I see, is this better? With just throw $e;:

The website encountered an unexpected error. Please try again later.</br></br><em class="placeholder">LogicException</em>: Attribute &quot;name&quot; does not exist for Node &quot;Twig\Node\CheckToStringNode&quot;. in <em class="placeholder">Twig\Node\Node-&gt;getAttribute()</em> (line <em class="placeholder">159</em> of <em class="placeholder">/app/vendor/twig/twig/src/Node/Node.php</em>). <pre class="backtrace">Drupal\Core\Template\TwigNodeTrans-&gt;compileString(Object) (Line: 37)
Drupal\Core\Template\TwigNodeTrans-&gt;compile(Object) (Line: 121)
Twig\Node\Node-&gt;compile(Object) (Line: 103)
Twig\Compiler-&gt;subcompile(Object) (Line: 53)
Twig\Node\IfNode-&gt;compile(Object) (Line: 121)
Twig\Node\Node-&gt;compile(Object) (Line: 121)
Twig\Node\Node-&gt;compile(Object) (Line: 103)
Twig\Compiler-&gt;subcompile(Object) (Line: 329)
Twig\Node\ModuleNode-&gt;compileDisplay(Object) (Line: 106)
Twig\Node\ModuleNode-&gt;compileTemplate(Object) (Line: 78)
Twig\Node\ModuleNode-&gt;compile(Object) (Line: 92)
Twig\Compiler-&gt;compile(Object) (Line: 771)
Twig\Environment-&gt;compile(Object) (Line: 792)
Twig\Environment-&gt;compileSource(Object) (Line: 482)
Twig\Environment-&gt;loadClass(&#039;__TwigTemplate_089f1193658f92ead9ce20c4135df4567045b678cbf1ad8a41ef7bbbb82d1812&#039;, &#039;themes/contrib/bootstrap/templates/node/node.html.twig&#039;, NULL) (Line: 446)
Twig\Environment-&gt;loadTemplate(&#039;themes/contrib/bootstrap/templates/node/node.html.twig&#039;) (Line: 64)
twig_render_template(&#039;themes/contrib/bootstrap/templates/node/node.html.twig&#039;, Array) (Line: 384)
Drupal\Core\Theme\ThemeManager-&gt;render(&#039;node&#039;, Array) (Line: 437)
Drupal\Core\Render\Renderer-&gt;doRender(Array, ) (Line: 195)
Drupal\Core\Render\Renderer-&gt;render(Array) (Line: 490)
Drupal\Core\Template\TwigExtension-&gt;escapeFilter(Object, Array, &#039;html&#039;, NULL, 1) (Line: 76)
__TwigTemplate_b9d0525dc2fa6d439aa7b0e04d9fba5e068aae4a3e15afa8eb9cbc8c797dc620-&gt;doDisplay(Array, Array) (Line: 427)
Twig\Template-&gt;displayWithErrorHandling(Array, Array) (Line: 398)
Twig\Template-&gt;display(Array) (Line: 406)
Twig\Template-&gt;render(Array) (Line: 64)
twig_render_template(&#039;core/modules/views/templates/views-view-unformatted.html.twig&#039;, Array) (Line: 384)
Drupal\Core\Theme\ThemeManager-&gt;render(&#039;views_view_unformatted&#039;, Array) (Line: 437)
Drupal\Core\Render\Renderer-&gt;doRender(Array) (Line: 450)
Drupal\Core\Render\Renderer-&gt;doRender(Array, ) (Line: 195)
Drupal\Core\Render\Renderer-&gt;render(Array) (Line: 490)
Drupal\Core\Template\TwigExtension-&gt;escapeFilter(Object, Array, &#039;html&#039;, NULL, 1) (Line: 126)
__TwigTemplate_532bd15a1ee96b91d410ad8b8f05717c156aa86733c3c964a524ef7b00f7f6db-&gt;doDisplay(Array, Array) (Line: 427)
Twig\Template-&gt;displayWithErrorHandling(Array, Array) (Line: 398)
Twig\Template-&gt;display(Array) (Line: 406)
Twig\Template-&gt;render(Array) (Line: 64)
twig_render_template(&#039;themes/contrib/bootstrap/templates/views/views-view.html.twig&#039;, Array) (Line: 384)
Drupal\Core\Theme\ThemeManager-&gt;render(&#039;views_view&#039;, Array) (Line: 437)
Drupal\Core\Render\Renderer-&gt;doRender(Array) (Line: 450)
Drupal\Core\Render\Renderer-&gt;doRender(Array, ) (Line: 195)
Drupal\Core\Render\Renderer-&gt;render(Array, ) (Line: 226)
Drupal\Core\Render\MainContent\HtmlRenderer-&gt;Drupal\Core\Render\MainContent\{closure}() (Line: 582)
Drupal\Core\Render\Renderer-&gt;executeInRenderContext(Object, Object) (Line: 227)
Drupal\Core\Render\MainContent\HtmlRenderer-&gt;prepare(Array, Object, Object) (Line: 117)
Drupal\Core\Render\MainContent\HtmlRenderer-&gt;renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber-&gt;onViewRenderArray(Object, &#039;kernel.view&#039;, Object)
call_user_func(Array, Object, &#039;kernel.view&#039;, Object) (Line: 111)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher-&gt;dispatch(&#039;kernel.view&#039;, Object) (Line: 156)
Symfony\Component\HttpKernel\HttpKernel-&gt;handleRaw(Object, 1) (Line: 68)
Symfony\Component\HttpKernel\HttpKernel-&gt;handle(Object, 1, 1) (Line: 57)
Drupal\Core\StackMiddleware\Session-&gt;handle(Object, 1, 1) (Line: 47)
Drupal\Core\StackMiddleware\KernelPreHandle-&gt;handle(Object, 1, 1) (Line: 99)
Drupal\page_cache\StackMiddleware\PageCache-&gt;pass(Object, 1, 1) (Line: 78)
Drupal\page_cache\StackMiddleware\PageCache-&gt;handle(Object, 1, 1) (Line: 47)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware-&gt;handle(Object, 1, 1) (Line: 52)
Drupal\Core\StackMiddleware\NegotiationMiddleware-&gt;handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel-&gt;handle(Object, 1, 1) (Line: 693)
Drupal\Core\DrupalKernel-&gt;handle(Object) (Line: 19)
</pre>

The issue is indeed in TwigNodeTrans line 156 as it is a fallback that assumes that the node would have a name attribute, which it does not as it is a CheckToStringNore() instance.

I've proposed a patch in the Drupal issue queue.

@fabpot thanks.

And it seems to work, thanks @fabpot.

Thanks Fab. I'll import the package tomorrow.

downgrading to 1.37 fix it for me

run

composer require twig/twig:1.37.1

Was this page helpful?
0 / 5 - 0 ratings