Repository navigation
Close the Twig include gate when loading a template throws - #1569
Merged
LukeTowers merged 1 commit intoOct 16, 2026
Merged
Conversation
System\Twig\Engine::get() opens Loader::$allowInclude, which lets the loader resolve any readable local path, then closes it after loading the template. A missing template or a syntax error threw before the close, leaving the gate open for the rest of the process. The previous value is now restored in a finally block.
|
Important Review skippedAuto reviews are disabled on base/target branches other than the default branch. Please check the settings in the CodeRabbit UI or the ⚙️ Run configuration
You can disable this status message by setting the Use the checkbox below for a quick retry:
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
LukeTowers
approved these changes
Oct 16, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
System\Twig\Engine::get()setsLoader::$allowIncludeto true while it loads a template, which lets the loader resolve any readable local file path as a template, and sets it back afterward. When loading throws (a missing template or a syntax error), the reset never runs, so local file inclusion stays enabled for the rest of the process. The previous value is now restored in afinallyblock.Under PHP-FPM the open gate lasts until the end of the failed request. Under a persistent worker such as Laravel Octane it lasts for every later request the worker serves.
Split out of #1511 so it can be reviewed on its own.
Testing
modules/system/tests/twig/EngineTest.phpcovers a successful render, a load that throws, a local file that must not resolve after a failed load, and restoring the previous value rather than forcing false. The throw tests fail without the change.