From e280f99996a87da94a7a51682b222c5ad5145b21 Mon Sep 17 00:00:00 2001 From: Molkobain Date: Mon, 22 Aug 2022 16:43:38 +0200 Subject: [PATCH] =?UTF-8?q?N=C2=B05437=20-=20PHP=208.0:=20Fix=20deprecated?= =?UTF-8?q?=20PHP=20notice=20in=20TWIG=20lib?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- composer.json | 2 +- composer.lock | 30 +- lib/composer/InstalledVersions.php | 13 + lib/composer/installed.json | 30 +- lib/composer/installed.php | 18 +- lib/twig/twig/.travis.yml | 28 +- lib/twig/twig/CHANGELOG | 280 +++++++++--------- lib/twig/twig/LICENSE | 40 ++- lib/twig/twig/composer.json | 7 +- lib/twig/twig/lib/Twig/Loader/String.php | 2 +- lib/twig/twig/src/Environment.php | 10 +- lib/twig/twig/src/ExpressionParser.php | 11 +- .../twig/src/Extension/AbstractExtension.php | 2 +- lib/twig/twig/src/Extension/CoreExtension.php | 36 ++- .../twig/src/Extension/ProfilerExtension.php | 2 +- lib/twig/twig/src/Lexer.php | 12 +- lib/twig/twig/src/Loader/ArrayLoader.php | 2 +- lib/twig/twig/src/Loader/ChainLoader.php | 2 +- lib/twig/twig/src/Loader/FilesystemLoader.php | 4 +- lib/twig/twig/src/Node/EmbedNode.php | 2 +- .../Expression/BlockReferenceExpression.php | 2 +- .../src/Node/Expression/CallExpression.php | 3 +- .../src/Node/Expression/GetAttrExpression.php | 2 +- .../src/Node/Expression/NameExpression.php | 2 +- .../src/Node/Expression/Test/DefinedTest.php | 2 +- .../src/Node/Expression/TestExpression.php | 2 +- lib/twig/twig/src/Node/ForNode.php | 2 +- lib/twig/twig/src/Node/IfNode.php | 2 +- lib/twig/twig/src/Node/IncludeNode.php | 2 +- lib/twig/twig/src/Node/ModuleNode.php | 2 +- lib/twig/twig/src/Node/Node.php | 14 +- lib/twig/twig/src/Node/SandboxNode.php | 7 + lib/twig/twig/src/Node/WithNode.php | 2 +- lib/twig/twig/src/Template.php | 4 +- .../twig/src/TokenParser/ApplyTokenParser.php | 2 +- 35 files changed, 326 insertions(+), 257 deletions(-) diff --git a/composer.json b/composer.json index 5373139ce..e0b9be0d6 100644 --- a/composer.json +++ b/composer.json @@ -28,7 +28,7 @@ "symfony/twig-bundle": "~3.4.47", "symfony/yaml": "~3.4.47", "thenetworg/oauth2-azure": "^2.0", - "twig/twig": "~1.42.5" + "twig/twig": "~1.43.1" }, "require-dev": { "symfony/stopwatch": "~3.4.47", diff --git a/composer.lock b/composer.lock index db751f255..144bc7e2e 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "b3cdced77dc5a1160c12aadcafd9d7da", + "content-hash": "86ca84263f7f271dfc10e5e63bd02385", "packages": [ { "name": "combodo/tcpdf", @@ -4444,30 +4444,30 @@ }, { "name": "twig/twig", - "version": "v1.42.5", + "version": "v1.43.1", "source": { "type": "git", "url": "https://github.com/twigphp/Twig.git", - "reference": "87b2ea9d8f6fd014d0621ca089bb1b3769ea3f8e" + "reference": "2311602f6a208715252febe682fa7c38e56a3373" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/twigphp/Twig/zipball/87b2ea9d8f6fd014d0621ca089bb1b3769ea3f8e", - "reference": "87b2ea9d8f6fd014d0621ca089bb1b3769ea3f8e", + "url": "https://api.github.com/repos/twigphp/Twig/zipball/2311602f6a208715252febe682fa7c38e56a3373", + "reference": "2311602f6a208715252febe682fa7c38e56a3373", "shasum": "" }, "require": { - "php": ">=5.5.0", + "php": ">=7.1.3", "symfony/polyfill-ctype": "^1.8" }, "require-dev": { "psr/container": "^1.0", - "symfony/phpunit-bridge": "^4.4|^5.0" + "symfony/phpunit-bridge": "^4.4.9|^5.0.9" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.42-dev" + "dev-master": "1.43-dev" } }, "autoload": { @@ -4506,9 +4506,19 @@ ], "support": { "issues": "https://github.com/twigphp/Twig/issues", - "source": "https://github.com/twigphp/Twig/tree/1.x" + "source": "https://github.com/twigphp/Twig/tree/v1.43.1" }, - "time": "2020-02-11T05:59:23+00:00" + "funding": [ + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/twig/twig", + "type": "tidelift" + } + ], + "time": "2020-08-05T15:05:05+00:00" } ], "packages-dev": [ diff --git a/lib/composer/InstalledVersions.php b/lib/composer/InstalledVersions.php index 7c5502ca4..d50e0c9fc 100644 --- a/lib/composer/InstalledVersions.php +++ b/lib/composer/InstalledVersions.php @@ -24,8 +24,21 @@ use Composer\Semver\VersionParser; */ class InstalledVersions { + /** + * @var mixed[]|null + * @psalm-var array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string, type: string}, versions: array}|array{}|null + */ private static $installed; + + /** + * @var bool|null + */ private static $canGetVendors; + + /** + * @var array[] + * @psalm-var array}> + */ private static $installedByVendor = array(); /** diff --git a/lib/composer/installed.json b/lib/composer/installed.json index d5888285e..215ca6b2c 100644 --- a/lib/composer/installed.json +++ b/lib/composer/installed.json @@ -4848,32 +4848,32 @@ }, { "name": "twig/twig", - "version": "v1.42.5", - "version_normalized": "1.42.5.0", + "version": "v1.43.1", + "version_normalized": "1.43.1.0", "source": { "type": "git", "url": "https://github.com/twigphp/Twig.git", - "reference": "87b2ea9d8f6fd014d0621ca089bb1b3769ea3f8e" + "reference": "2311602f6a208715252febe682fa7c38e56a3373" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/twigphp/Twig/zipball/87b2ea9d8f6fd014d0621ca089bb1b3769ea3f8e", - "reference": "87b2ea9d8f6fd014d0621ca089bb1b3769ea3f8e", + "url": "https://api.github.com/repos/twigphp/Twig/zipball/2311602f6a208715252febe682fa7c38e56a3373", + "reference": "2311602f6a208715252febe682fa7c38e56a3373", "shasum": "" }, "require": { - "php": ">=5.5.0", + "php": ">=7.1.3", "symfony/polyfill-ctype": "^1.8" }, "require-dev": { "psr/container": "^1.0", - "symfony/phpunit-bridge": "^4.4|^5.0" + "symfony/phpunit-bridge": "^4.4.9|^5.0.9" }, - "time": "2020-02-11T05:59:23+00:00", + "time": "2020-08-05T15:05:05+00:00", "type": "library", "extra": { "branch-alias": { - "dev-master": "1.42-dev" + "dev-master": "1.43-dev" } }, "installation-source": "dist", @@ -4913,8 +4913,18 @@ ], "support": { "issues": "https://github.com/twigphp/Twig/issues", - "source": "https://github.com/twigphp/Twig/tree/1.x" + "source": "https://github.com/twigphp/Twig/tree/v1.43.1" }, + "funding": [ + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/twig/twig", + "type": "tidelift" + } + ], "install-path": "../twig/twig" } ], diff --git a/lib/composer/installed.php b/lib/composer/installed.php index 5db6e6438..f60984c27 100644 --- a/lib/composer/installed.php +++ b/lib/composer/installed.php @@ -1,22 +1,22 @@ array( - 'pretty_version' => 'dev-develop', - 'version' => 'dev-develop', + 'pretty_version' => '3.0.2-rc1', + 'version' => '3.0.2.0-RC1', 'type' => 'project', 'install_path' => __DIR__ . '/../../', 'aliases' => array(), - 'reference' => 'e4343ded01403f5b8b0499190ab60b004175bb19', + 'reference' => 'c5d5379c492059a80eb72cc1dab148dd6e82705f', 'name' => 'combodo/itop', 'dev' => true, ), 'versions' => array( 'combodo/itop' => array( - 'pretty_version' => 'dev-develop', - 'version' => 'dev-develop', + 'pretty_version' => '3.0.2-rc1', + 'version' => '3.0.2.0-RC1', 'type' => 'project', 'install_path' => __DIR__ . '/../../', 'aliases' => array(), - 'reference' => 'e4343ded01403f5b8b0499190ab60b004175bb19', + 'reference' => 'c5d5379c492059a80eb72cc1dab148dd6e82705f', 'dev_requirement' => false, ), 'combodo/tcpdf' => array( @@ -654,12 +654,12 @@ 'dev_requirement' => false, ), 'twig/twig' => array( - 'pretty_version' => 'v1.42.5', - 'version' => '1.42.5.0', + 'pretty_version' => 'v1.43.1', + 'version' => '1.43.1.0', 'type' => 'library', 'install_path' => __DIR__ . '/../twig/twig', 'aliases' => array(), - 'reference' => '87b2ea9d8f6fd014d0621ca089bb1b3769ea3f8e', + 'reference' => '2311602f6a208715252febe682fa7c38e56a3373', 'dev_requirement' => false, ), 'zendframework/zend-loader' => array( diff --git a/lib/twig/twig/.travis.yml b/lib/twig/twig/.travis.yml index ff6132b35..33be91460 100644 --- a/lib/twig/twig/.travis.yml +++ b/lib/twig/twig/.travis.yml @@ -1,46 +1,36 @@ language: php -dist: trusty - -sudo: false +dist: xenial cache: directories: - vendor - $HOME/.composer/cache/files - env: global: - - TWIG_EXT=no - - SYMFONY_PHPUNIT_REMOVE_RETURN_TYPEHINT=1 + - SYMFONY_PHPUNIT_DISABLE_RESULT_CACHE=1 before_install: - phpenv config-rm xdebug.ini || return 0 + - echo memory_limit = -1 >> ~/.phpenv/versions/$TRAVIS_PHP_VERSION/etc/conf.d/travis.ini install: - travis_retry composer install + - export PHPUNIT=$(readlink -f ./vendor/bin/simple-phpunit) + - $PHPUNIT install -before_script: - - if [ "$TWIG_EXT" == "yes" ]; then sh -c "cd ext/twig && phpize && ./configure --enable-twig && make && make install"; fi - - if [ "$TWIG_EXT" == "yes" ]; then echo "extension=twig.so" >> `php --ini | grep "Loaded Configuration" | sed -e "s|.*:\s*||"`; fi - -script: ./vendor/bin/simple-phpunit +script: + - $PHPUNIT jobs: fast_finish: true include: - - php: 5.5 - - php: 5.5 - env: TWIG_EXT=yes - - php: 5.6 - - php: 5.6 - env: TWIG_EXT=yes - - php: 7.0 - php: 7.1 - php: 7.2 - php: 7.3 - - php: 7.4snapshot + - php: 7.4 + - php: nightly - stage: integration tests php: 7.3 script: ./drupal_test.sh diff --git a/lib/twig/twig/CHANGELOG b/lib/twig/twig/CHANGELOG index e549c9307..66117b731 100644 --- a/lib/twig/twig/CHANGELOG +++ b/lib/twig/twig/CHANGELOG @@ -1,13 +1,29 @@ -* 1.42.5 (2020-02-11) +# 1.43.1 (2020-08-05) + + * Fix sandbox not disabled if syntax error occurs within {% sandbox %} tag + * Fix a regression when not using a space before an operator + * Restrict callables to closures in filters + * Allow trailing commas in argument lists (in calls as well as definitions) + +# 1.43.0 (2020-07-05) + + * Throw exception in case non-Traversable data is passed to "filter" + * Fix context optimization on PHP 7.4 + * Fix PHP 8 compatibility + * Drop PHP 5.5 5.6, and 7.0 support + * Fix ambiguous syntax parsing + * In sandbox, the `filter`, `map` and `reduce` filters require Closures in `arrow` parameter + +# 1.42.5 (2020-02-11) * Fix implementation of case-insensitivity for method names -* 1.42.4 (2019-11-11) +# 1.42.4 (2019-11-11) * optimized "block('foo') ?? 'bar" * added supported for exponential numbers -* 1.42.3 (2019-08-24) +# 1.42.3 (2019-08-24) * fixed the "split" filter when the delimiter is "0" * fixed the "empty" test on Traversable instances @@ -15,34 +31,34 @@ * fixed PHP 7.4 compatibility * bumped the minimal PHP version to 5.5 -* 1.42.2 (2019-06-18) +# 1.42.2 (2019-06-18) * Display partial output (PHP buffer) when an error occurs in debug mode -* 1.42.1 (2019-06-04) +# 1.42.1 (2019-06-04) * added support for "Twig\Markup" instances in the "in" test (again) * allowed string operators as variables names in assignments -* 1.42.0 (2019-05-31) +# 1.42.0 (2019-05-31) * fixed the "filter" filter when the argument is \Traversable but does not implement \Iterator (\SimpleXmlElement for instance) * fixed a PHP fatal error when calling a macro imported in a block in a nested block * fixed a PHP fatal error when calling a macro imported in the template in another macro * fixed wrong error message on "import" and "from" -* 1.41.0 (2019-05-14) +# 1.41.0 (2019-05-14) * fixed support for PHP 7.4 * added "filter", "map", and "reduce" filters (and support for arrow functions) * fixed partial output leak when a PHP fatal error occurs * optimized context access on PHP 7.4 -* 1.40.1 (2019-04-29) +# 1.40.1 (2019-04-29) -* fixed regression in NodeTraverser +# fixed regression in NodeTraverser -* 1.40.0 (2019-04-28) +# 1.40.0 (2019-04-28) * allowed Twig\NodeVisitor\NodeVisitorInterface::leaveNode() to return "null" instead of "false" (same meaning) * added the "apply" tag as a replacement for the "filter" tag @@ -51,11 +67,11 @@ * fixed Lexer when using custom options containing the # char * fixed "import" when macros are stored in a template string -* 1.39.1 (2019-04-16) +# 1.39.1 (2019-04-16) * fixed EscaperNodeVisitor -* 1.39.0 (2019-04-16) +# 1.39.0 (2019-04-16) * added Traversable support for the length filter * fixed some wrong location in error messages @@ -66,11 +82,11 @@ * fixed "include" with "ignore missing" when an error loading occurs in the included template * added support for a new whitespace trimming option ({%~ ~%}, {{~ ~}}, {#~ ~#}) -* 1.38.4 (2019-03-23) +# 1.38.4 (2019-03-23) * fixed CheckToStringNode implementation (broken when a function/filter is variadic) -* 1.38.3 (2019-03-21) +# 1.38.3 (2019-03-21) * fixed the spaceless filter so that it behaves like the spaceless tag * fixed BC break on Environment::resolveTemplate() @@ -78,15 +94,15 @@ * allowed Traversable objects to be used in the "with" tag * allowed Traversable objects to be used in the "with" argument of the "include" and "embed" tags -* 1.38.2 (2019-03-12) +# 1.38.2 (2019-03-12) * added TemplateWrapper::getTemplateName() -* 1.38.1 (2019-03-12) +# 1.38.1 (2019-03-12) * fixed class aliases -* 1.38.0 (2019-03-12) +# 1.38.0 (2019-03-12) * fixed sandbox security issue (under some circumstances, calling the __toString() method on an object was possible even if not allowed by the @@ -103,12 +119,12 @@ * added Twig\Loader\ChainLoader::getLoaders() * changed internal code to use the namespaced classes as much as possible -* 1.37.1 (2019-01-14) +# 1.37.1 (2019-01-14) * fixed regression (key exists check for non ArrayObject objects) * fixed logic in TemplateWrapper -* 1.37.0 (2019-01-14) +# 1.37.0 (2019-01-14) * fixed ArrayObject access with a null value * fixed embedded templates starting with a BOM @@ -118,7 +134,7 @@ * fixed float representation in compiled templates * added a second argument to the join filter (last separator configuration) -* 1.36.0 (2018-12-16) +# 1.36.0 (2018-12-16) * made sure twig_include returns a string * fixed multi-byte UFT-8 in escape('html_attr') @@ -127,24 +143,24 @@ * fixed GlobalsInterface extended class * fixed filesystem loader throwing an exception instead of returning false -* 1.35.4 (2018-07-13) +# 1.35.4 (2018-07-13) * ensured that syntax errors are triggered with the right line * added the Symfony ctype polyfill as a dependency * "js" filter now produces valid JSON -* 1.35.3 (2018-03-20) +# 1.35.3 (2018-03-20) * fixed block names unicity * fixed counting children of SimpleXMLElement objects * added missing else clause to avoid infinite loops * fixed .. (range operator) in sandbox policy -* 1.35.2 (2018-03-03) +# 1.35.2 (2018-03-03) * fixed a regression in the way the profiler is registered in templates -* 1.35.1 (2018-03-02) +# 1.35.1 (2018-03-02) * added an exception when using "===" instead of "same as" * fixed possible array to string conversion concealing actual error @@ -152,31 +168,31 @@ * fixed length filter when passing an instance of IteratorAggregate * fixed Environment::resolveTemplate to accept instances of TemplateWrapper -* 1.35.0 (2017-09-27) +# 1.35.0 (2017-09-27) * added Twig_Profiler_Profile::reset() * fixed use TokenParser to return an empty Node * added RuntimeExtensionInterface * added circular reference detection when loading templates -* 1.34.4 (2017-07-04) +# 1.34.4 (2017-07-04) * added support for runtime loaders in IntegrationTestCase * fixed deprecation when using Twig_Profiler_Dumper_Html -* 1.34.3 (2017-06-07) +# 1.34.3 (2017-06-07) * fixed namespaces introduction -* 1.34.2 (2017-06-05) +# 1.34.2 (2017-06-05) * fixed namespaces introduction -* 1.34.1 (2017-06-05) +# 1.34.1 (2017-06-05) * fixed namespaces introduction -* 1.34.0 (2017-06-05) +# 1.34.0 (2017-06-05) * added support for PHPUnit 6 when testing extensions * fixed PHP 7.2 compatibility @@ -186,15 +202,15 @@ * dropped HHVM support * dropped PHP 5.2 support -* 1.33.2 (2017-04-20) +# 1.33.2 (2017-04-20) * fixed edge case in the method cache for Twig attributes -* 1.33.1 (2017-04-18) +# 1.33.1 (2017-04-18) * fixed the empty() test -* 1.33.0 (2017-03-22) +# 1.33.0 (2017-03-22) * fixed a race condition handling when writing cache files * "length" filter now returns string length when applied to an object that does @@ -203,13 +219,13 @@ objects implement __toString() but not \Countable * fixed JS escaping for unicode characters with higher code points -* 1.32.0 (2017-02-26) +# 1.32.0 (2017-02-26) * fixed deprecation notice in Twig_Util_DeprecationCollector * added a PSR-11 compatible runtime loader * added `side` argument to `trim` to allow left or right trimming only. -* 1.31.0 (2017-01-11) +# 1.31.0 (2017-01-11) * added Twig_NodeCaptureInterface for nodes that capture all output * fixed marking the environment as initialized too early @@ -217,13 +233,13 @@ * turned fatal error into exception when a previously generated cache is corrupted * fixed offline cache warm-ups for embedded templates -* 1.30.0 (2016-12-23) +# 1.30.0 (2016-12-23) * added Twig_FactoryRuntimeLoader * deprecated function/test/filter/tag overriding * deprecated the "disable_c_ext" attribute on Twig_Node_Expression_GetAttr -* 1.29.0 (2016-12-13) +# 1.29.0 (2016-12-13) * fixed sandbox being left enabled if an exception is thrown while rendering * marked some classes as being final (via @final) @@ -232,16 +248,16 @@ * deprecated silent display of undefined blocks * deprecated support for mbstring.func_overload != 0 -* 1.28.2 (2016-11-23) +# 1.28.2 (2016-11-23) * fixed precedence between getFoo() and isFoo() in Twig_Template::getAttribute() * improved a deprecation message -* 1.28.1 (2016-11-18) +# 1.28.1 (2016-11-18) * fixed block() function when used with a template argument -* 1.28.0 (2016-11-17) +# 1.28.0 (2016-11-17) * added support for the PHP 7 null coalescing operator for the ?? Twig implementation * exposed a way to access template data and methods in a portable way @@ -251,7 +267,7 @@ * added "is defined" support for block() and constant() * optimized the way attributes are fetched -* 1.27.0 (2016-10-25) +# 1.27.0 (2016-10-25) * deprecated Twig_Parser::getEnvironment() * deprecated Twig_Parser::addHandler() and Twig_Parser::addNodeVisitor() @@ -269,13 +285,13 @@ * fixed template paths when a template name contains a protocol like vfs:// * improved debugging with Twig_Sandbox_SecurityError exceptions for disallowed methods and properties -* 1.26.1 (2016-10-05) +# 1.26.1 (2016-10-05) * removed template source code from generated template classes when debug is disabled * fixed default implementation of Twig_Template::getDebugInfo() for better BC * fixed regression on static calls for functions/filters/tests -* 1.26.0 (2016-10-02) +# 1.26.0 (2016-10-02) * added template cache invalidation based on more environment options * added a missing deprecation notice @@ -283,7 +299,7 @@ * allowed filters/functions/tests implementation to use a different class than the extension they belong to * deprecated Twig_ExtensionInterface::getName() -* 1.25.0 (2016-09-21) +# 1.25.0 (2016-09-21) * changed the way we store template source in template classes * removed usage of realpath in cache keys @@ -293,13 +309,13 @@ * deprecated Twig_Environment::getLexer(), Twig_Environment::getParser(), Twig_Environment::getCompiler() * deprecated Twig_Compiler::getFilename() -* 1.24.2 (2016-09-01) +# 1.24.2 (2016-09-01) * fixed static callables * fixed a potential PHP warning when loading the cache * fixed a case where the autoescaping does not work as expected -* 1.24.1 (2016-05-30) +# 1.24.1 (2016-05-30) * fixed reserved keywords (forbids true, false, null and none keywords for variables names) * fixed support for PHP7 (Throwable support) @@ -308,36 +324,36 @@ getTokenParsers(), getTags(), getNodeVisitors(), getUnaryOperators(), getBinaryOperators(), getFunctions(), getFilters(), getGlobals(), initGlobals(), initExtensions(), and initExtension() -* 1.24.0 (2016-01-25) +# 1.24.0 (2016-01-25) * adding support for the ?? operator * fixed the defined test when used on a constant, a map, or a sequence * undeprecated _self (should only be used to get the template name, not the template instance) * fixed parsing on PHP7 -* 1.23.3 (2016-01-11) +# 1.23.3 (2016-01-11) * fixed typo -* 1.23.2 (2015-01-11) +# 1.23.2 (2015-01-11) * added versions in deprecated messages * made file cache tolerant for trailing (back)slashes on directory configuration * deprecated unused Twig_Node_Expression_ExtensionReference class -* 1.23.1 (2015-11-05) +# 1.23.1 (2015-11-05) * fixed some exception messages which triggered PHP warnings * fixed BC on Twig_Test_NodeTestCase -* 1.23.0 (2015-10-29) +# 1.23.0 (2015-10-29) * deprecated the possibility to override an extension by registering another one with the same name * deprecated Twig_ExtensionInterface::getGlobals() (added Twig_Extension_GlobalsInterface for BC) * deprecated Twig_ExtensionInterface::initRuntime() (added Twig_Extension_InitRuntimeInterface for BC) * deprecated Twig_Environment::computeAlternatives() -* 1.22.3 (2015-10-13) +# 1.22.3 (2015-10-13) * fixed regression when using null as a cache strategy * improved performance when checking template freshness @@ -346,15 +362,15 @@ * fixed logic for custom escapers to call them even on integers and null values * changed template cache names to take into account the Twig C extension -* 1.22.2 (2015-09-22) +# 1.22.2 (2015-09-22) * fixed a race condition in template loading -* 1.22.1 (2015-09-15) +# 1.22.1 (2015-09-15) * fixed regression in template_from_string -* 1.22.0 (2015-09-13) +# 1.22.0 (2015-09-13) * made Twig_Test_IntegrationTestCase more flexible * added an option to force PHP bytecode invalidation when writing a compiled template into the cache @@ -365,23 +381,23 @@ * added a way to override the filesystem template cache system * added a way to get the original template source from Twig_Template -* 1.21.2 (2015-09-09) +# 1.21.2 (2015-09-09) * fixed variable names for the deprecation triggering code * fixed escaping strategy detection based on filename * added Traversable support for replace, merge, and sort * deprecated support for character by character replacement for the "replace" filter -* 1.21.1 (2015-08-26) +# 1.21.1 (2015-08-26) * fixed regression when using the deprecated Twig_Test_* classes -* 1.21.0 (2015-08-24) +# 1.21.0 (2015-08-24) * added deprecation notices for deprecated features * added a deprecation "framework" for filters/functions/tests and test fixtures -* 1.20.0 (2015-08-12) +# 1.20.0 (2015-08-12) * forbid access to the Twig environment from templates and internal parts of Twig_Template * fixed limited RCEs when in sandbox mode @@ -390,7 +406,7 @@ * added Twig_BaseNodeVisitor to ease the compatibility of node visitors between 1.x and 2.x -* 1.19.0 (2015-07-31) +# 1.19.0 (2015-07-31) * fixed wrong error message when including an undefined template in a child template * added support for variadic filters, functions, and tests @@ -400,19 +416,19 @@ * deprecated Twig_Environment::clearTemplateCache() * fixed sandbox disabling when using the include function -* 1.18.2 (2015-06-06) +# 1.18.2 (2015-06-06) * fixed template/line guessing in exceptions for nested templates * optimized the number of inodes and the size of realpath cache when using the cache -* 1.18.1 (2015-04-19) +# 1.18.1 (2015-04-19) * fixed memory leaks in the C extension * deprecated Twig_Loader_String * fixed the slice filter when used with a SimpleXMLElement object * fixed filesystem loader when trying to load non-files (like directories) -* 1.18.0 (2015-01-25) +# 1.18.0 (2015-01-25) * fixed some error messages where the line was wrong (unknown variables or argument names) * added a new way to customize the main Module node (via empty nodes) @@ -420,18 +436,18 @@ * added a profiler * fixed filesystem loader cache when different file paths are used for the same template -* 1.17.0 (2015-01-14) +# 1.17.0 (2015-01-14) * added a 'filename' autoescaping strategy, which dynamically chooses the autoescaping strategy for a template based on template file extension. -* 1.16.3 (2014-12-25) +# 1.16.3 (2014-12-25) * fixed regression for dynamic parent templates * fixed cache management with statcache * fixed a regression in the slice filter -* 1.16.2 (2014-10-17) +# 1.16.2 (2014-10-17) * fixed timezone on dates as strings * fixed 2-words test names when a custom node class is not used @@ -442,7 +458,7 @@ * fixed a regression in the in operator * fixed a regression in the slice filter -* 1.16.1 (2014-10-10) +# 1.16.1 (2014-10-10) * improved error reporting in a sandboxed template * fixed missing error file/line information under certain circumstances @@ -452,20 +468,20 @@ * fixed for mb function overload mb_substr acting different * fixed the attribute() function when passing a variable for the arguments -* 1.16.0 (2014-07-05) +# 1.16.0 (2014-07-05) * changed url_encode to always encode according to RFC 3986 * fixed inheritance in a 'use'-hierarchy * removed the __toString policy check when the sandbox is disabled * fixed recursively calling blocks in templates with inheritance -* 1.15.1 (2014-02-13) +# 1.15.1 (2014-02-13) * fixed the conversion of the special '0000-00-00 00:00' date * added an error message when trying to import an undefined block from a trait * fixed a C extension crash when accessing defined but uninitialized property. -* 1.15.0 (2013-12-06) +# 1.15.0 (2013-12-06) * made ignoreStrictCheck in Template::getAttribute() works with __call() methods throwing BadMethodCallException * added min and max functions @@ -475,19 +491,19 @@ * added a source function to include the content of a template without rendering it * fixed the C extension sandbox behavior when get or set is prepend to method name -* 1.14.2 (2013-10-30) +# 1.14.2 (2013-10-30) * fixed error filename/line when an error occurs in an included file * allowed operators that contain whitespaces to have more than one whitespace * allowed tests to be made of 1 or 2 words (like "same as" or "divisible by") -* 1.14.1 (2013-10-15) +# 1.14.1 (2013-10-15) * made it possible to use named operators as variables * fixed the possibility to have a variable named 'matches' * added support for PHP 5.5 DateTimeInterface -* 1.14.0 (2013-10-03) +# 1.14.0 (2013-10-03) * fixed usage of the html_attr escaping strategy to avoid double-escaping with the html strategy * added new operators: ends with, starts with, and matches @@ -499,12 +515,12 @@ * fixed template_from_string when the template includes or extends other ones * fixed a crash of the C extension on an edge case -* 1.13.2 (2013-08-03) +# 1.13.2 (2013-08-03) * fixed the error line number for an error occurs in and embedded template * fixed crashes of the C extension on some edge cases -* 1.13.1 (2013-06-06) +# 1.13.1 (2013-06-06) * added the possibility to ignore the filesystem constructor argument in Twig_Loader_Filesystem * fixed Twig_Loader_Chain::exists() for a loader which implements Twig_ExistsLoaderInterface @@ -512,7 +528,7 @@ * added support for object instances as the second argument of the constant test * fixed the include function when used in an assignment -* 1.13.0 (2013-05-10) +# 1.13.0 (2013-05-10) * fixed getting a numeric-like item on a variable ('09' for instance) * fixed getting a boolean or float key on an array, so it is consistent with PHP's array access: @@ -521,7 +537,7 @@ * changed ☃ to § in tests * enforced usage of named arguments after positional ones -* 1.12.3 (2013-04-08) +# 1.12.3 (2013-04-08) * fixed a security issue in the filesystem loader where it was possible to include a template one level above the configured path @@ -529,25 +545,25 @@ * added a batch filter * added support for encoding an array as query string in the url_encode filter -* 1.12.2 (2013-02-09) +# 1.12.2 (2013-02-09) * fixed the timezone used by the date filter and function when the given date contains a timezone (like 2010-01-28T15:00:00+02:00) * fixed globals when getGlobals is called early on * added the first and last filter -* 1.12.1 (2013-01-15) +# 1.12.1 (2013-01-15) * added support for object instances as the second argument of the constant function * relaxed globals management to avoid a BC break * added support for {{ some_string[:2] }} -* 1.12.0 (2013-01-08) +# 1.12.0 (2013-01-08) * added verbatim as an alias for the raw tag to avoid confusion with the raw filter * fixed registration of tests and functions as anonymous functions * fixed globals management -* 1.12.0-RC1 (2012-12-29) +# 1.12.0-RC1 (2012-12-29) * added an include function (does the same as the include tag but in a more flexible way) * added the ability to use any PHP callable to define filters, functions, and tests @@ -557,14 +573,14 @@ * moved filters/functions/tests syntax errors to the parser * added support for extended ternary operator syntaxes -* 1.11.1 (2012-11-11) +# 1.11.1 (2012-11-11) * fixed debug info line numbering (was off by 2) * fixed escaping when calling a macro inside another one (regression introduced in 1.9.1) * optimized variable access on PHP 5.4 * fixed a crash of the C extension when an exception was thrown from a macro called without being imported (using _self.XXX) -* 1.11.0 (2012-11-07) +# 1.11.0 (2012-11-07) * fixed macro compilation when a variable name is a PHP reserved keyword * changed the date filter behavior to always apply the default timezone, except if false is passed as the timezone @@ -574,41 +590,41 @@ * optimized the way Twig exceptions are managed (to make them faster) * added Twig_ExistsLoaderInterface (implementing this interface in your loader make the chain loader much faster) -* 1.10.3 (2012-10-19) +# 1.10.3 (2012-10-19) * fixed wrong template location in some error messages * reverted a BC break introduced in 1.10.2 * added a split filter -* 1.10.2 (2012-10-15) +# 1.10.2 (2012-10-15) * fixed macro calls on PHP 5.4 -* 1.10.1 (2012-10-15) +# 1.10.1 (2012-10-15) * made a speed optimization to macro calls when imported via the "import" tag * fixed C extension compilation on Windows * fixed a segfault in the C extension when using DateTime objects -* 1.10.0 (2012-09-28) +# 1.10.0 (2012-09-28) * extracted functional tests framework to make it reusable for third-party extensions * added namespaced templates support in Twig_Loader_Filesystem * added Twig_Loader_Filesystem::prependPath() * fixed an error when a token parser pass a closure as a test to the subparse() method -* 1.9.2 (2012-08-25) +# 1.9.2 (2012-08-25) * fixed the in operator for objects that contain circular references * fixed the C extension when accessing a public property of an object implementing the \ArrayAccess interface -* 1.9.1 (2012-07-22) +# 1.9.1 (2012-07-22) * optimized macro calls when auto-escaping is on * fixed wrong parent class for Twig_Function_Node * made Twig_Loader_Chain more explicit about problems -* 1.9.0 (2012-07-13) +# 1.9.0 (2012-07-13) * made the parsing independent of the template loaders * fixed exception trace when an error occurs when rendering a child template @@ -616,26 +632,26 @@ * fixed nested embed tag calls * added the date_modify filter -* 1.8.3 (2012-06-17) +# 1.8.3 (2012-06-17) * fixed paths in the filesystem loader when passing a path that ends with a slash or a backslash * fixed escaping when a project defines a function named html or js * fixed chmod mode to apply the umask correctly -* 1.8.2 (2012-05-30) +# 1.8.2 (2012-05-30) * added the abs filter * fixed a regression when using a number in template attributes * fixed compiler when mbstring.func_overload is set to 2 * fixed DateTimeZone support in date filter -* 1.8.1 (2012-05-17) +# 1.8.1 (2012-05-17) * fixed a regression when dealing with SimpleXMLElement instances in templates * fixed "is_safe" value for the "dump" function when "html_errors" is not defined in php.ini * switched to use mbstring whenever possible instead of iconv (you might need to update your encoding as mbstring and iconv encoding names sometimes differ) -* 1.8.0 (2012-05-08) +# 1.8.0 (2012-05-08) * enforced interface when adding tests, filters, functions, and node visitors from extensions * fixed a side-effect of the date filter where the timezone might be changed @@ -644,7 +660,7 @@ * changed the autoescape option to also accept a supported escaping strategy (for BC, true is equivalent to html) * added an embed tag -* 1.7.0 (2012-04-24) +# 1.7.0 (2012-04-24) * fixed a PHP warning when using CIFS * fixed template line number in some exceptions @@ -658,30 +674,30 @@ * fixed filesystem loader freshness logic for high traffic websites * fixed random function when charset is null -* 1.6.5 (2012-04-11) +# 1.6.5 (2012-04-11) * fixed a regression when a template only extends another one without defining any blocks -* 1.6.4 (2012-04-02) +# 1.6.4 (2012-04-02) * fixed PHP notice in Twig_Error::guessTemplateLine() introduced in 1.6.3 * fixed performance when compiling large files * optimized parent template creation when the template does not use dynamic inheritance -* 1.6.3 (2012-03-22) +# 1.6.3 (2012-03-22) * fixed usage of Z_ADDREF_P for PHP 5.2 in the C extension * fixed compilation of numeric values used in templates when using a locale where the decimal separator is not a dot * made the strategy used to guess the real template file name and line number in exception messages much faster and more accurate -* 1.6.2 (2012-03-18) +# 1.6.2 (2012-03-18) * fixed sandbox mode when used with inheritance * added preserveKeys support for the slice filter * fixed the date filter when a DateTime instance is passed with a specific timezone * added a trim filter -* 1.6.1 (2012-02-29) +# 1.6.1 (2012-02-29) * fixed Twig C extension * removed the creation of Twig_Markup instances when not needed @@ -689,7 +705,7 @@ * fixed the slice filter on strings when the length is not specified * fixed the creation of the cache directory in case of a race condition -* 1.6.0 (2012-02-04) +# 1.6.0 (2012-02-04) * fixed raw blocks when used with the whitespace trim option * made a speed optimization to macro calls when imported via the "from" tag @@ -704,22 +720,22 @@ * added recursive parsing support in the parser * added string and integer handling for the random function -* 1.5.1 (2012-01-05) +# 1.5.1 (2012-01-05) * fixed a regression when parsing strings -* 1.5.0 (2012-01-04) +# 1.5.0 (2012-01-04) * added Traversable objects support for the join filter -* 1.5.0-RC2 (2011-12-30) +# 1.5.0-RC2 (2011-12-30) * added a way to set the default global date interval format * fixed the date filter for DateInterval instances (setTimezone() does not exist for them) * refactored Twig_Template::display() to ease its extension * added a number_format filter -* 1.5.0-RC1 (2011-12-26) +# 1.5.0-RC1 (2011-12-26) * removed the need to quote hash keys * allowed hash keys to be any expression @@ -734,19 +750,19 @@ * added string interpolation support * enhanced exceptions for unknown filters, functions, tests, and tags -* 1.4.0 (2011-12-07) +# 1.4.0 (2011-12-07) * fixed lexer when using big numbers (> PHP_INT_MAX) * added missing preserveKeys argument to the reverse filter * fixed macros containing filter tag calls -* 1.4.0-RC2 (2011-11-27) +# 1.4.0-RC2 (2011-11-27) * removed usage of Reflection in Twig_Template::getAttribute() * added a C extension that can optionally replace Twig_Template::getAttribute() * added negative timestamp support to the date filter -* 1.4.0-RC1 (2011-11-20) +# 1.4.0-RC1 (2011-11-20) * optimized variable access when using PHP 5.4 * changed the precedence of the .. operator to be more consistent with languages that implements such a feature like Ruby @@ -764,11 +780,11 @@ * moved all node manipulations outside the compile() Node method * made several speed optimizations -* 1.3.0 (2011-10-08) +# 1.3.0 (2011-10-08) no changes -* 1.3.0-RC1 (2011-10-04) +# 1.3.0-RC1 (2011-10-04) * added an optimization for the parent() function * added cache reloading when auto_reload is true and an extension has been modified @@ -776,11 +792,11 @@ no changes * allowed empty templates to be used as traits * added traits support for the "parent" function -* 1.2.0 (2011-09-13) +# 1.2.0 (2011-09-13) no changes -* 1.2.0-RC1 (2011-09-10) +# 1.2.0-RC1 (2011-09-10) * enhanced the exception when a tag remains unclosed * added support for empty Countable objects for the "empty" test @@ -797,7 +813,7 @@ no changes * removed the possibility to use the "extends" tag from a block * added "if" modifier support to "for" loops -* 1.1.2 (2011-07-30) +# 1.1.2 (2011-07-30) * fixed json_encode filter on PHP 5.2 * fixed regression introduced in 1.1.1 ({{ block(foo|lower) }}) @@ -807,28 +823,28 @@ no changes * fixed a parsing problem when a large chunk of text is enclosed in a comment tag * added PHPDoc for all Token parsers and Core extension functions -* 1.1.1 (2011-07-17) +# 1.1.1 (2011-07-17) * added a performance optimization in the Optimizer (also helps to lower the number of nested level calls) * made some performance improvement for some edge cases -* 1.1.0 (2011-06-28) +# 1.1.0 (2011-06-28) * fixed json_encode filter -* 1.1.0-RC3 (2011-06-24) +# 1.1.0-RC3 (2011-06-24) * fixed method case-sensitivity when using the sandbox mode * added timezone support for the date filter * fixed possible security problems with NUL bytes -* 1.1.0-RC2 (2011-06-16) +# 1.1.0-RC2 (2011-06-16) * added an exception when the template passed to "use" is not a string * made 'a.b is defined' not throw an exception if a is not defined (in strict mode) * added {% line \d+ %} directive -* 1.1.0-RC1 (2011-05-28) +# 1.1.0-RC1 (2011-05-28) Flush your cache after upgrading. @@ -842,13 +858,13 @@ Flush your cache after upgrading. * wrapped all compilation and runtime exceptions with Twig_Error_Runtime and added logic to guess the template name and line * moved display() method to Twig_Template (generated templates should now use doDisplay() instead) -* 1.0.0 (2011-03-27) +# 1.0.0 (2011-03-27) * fixed output when using mbstring * fixed duplicate call of methods when using the sandbox * made the charset configurable for the escape filter -* 1.0.0-RC2 (2011-02-21) +# 1.0.0-RC2 (2011-02-21) * changed the way {% set %} works when capturing (the content is now marked as safe) * added support for macro name in the endmacro tag @@ -859,7 +875,7 @@ Flush your cache after upgrading. * removed coupling between Twig_Node and Twig_Template * fixed the ternary operator precedence rule -* 1.0.0-RC1 (2011-01-09) +# 1.0.0-RC1 (2011-01-09) Backward incompatibilities: @@ -885,7 +901,7 @@ Changes: * the "default" filter now uses the "empty" test instead of just checking for null * added the "empty" test -* 0.9.10 (2010-12-16) +# 0.9.10 (2010-12-16) Backward incompatibilities: @@ -920,7 +936,7 @@ Changes: * added an Optimizer extension (enabled by default; optimizes "for" loops and "raw" filters) * added priority to node visitors -* 0.9.9 (2010-11-28) +# 0.9.9 (2010-11-28) Backward incompatibilities: * the self special variable has been renamed to _self @@ -969,7 +985,7 @@ Changes: * renamed self to _self (to avoid conflict) * fixed Twig_Template::getAttribute() for protected properties -* 0.9.8 (2010-06-28) +# 0.9.8 (2010-06-28) Backward incompatibilities: * the trans tag plural count is now attached to the plural tag: @@ -984,7 +1000,7 @@ Backward incompatibilities: * fixed set tag when used with a capture * fixed type hinting for Twig_Environment::addFilter() method -* 0.9.7 (2010-06-12) +# 0.9.7 (2010-06-12) Backward incompatibilities: * changed 'as' to '=' for the set tag ({% set title as "Title" %} must now be {% set title = "Title" %}) @@ -1011,7 +1027,7 @@ Backward incompatibilities: * fixed sandbox mode (__toString() method check was not enforced if called implicitly from a simple statement like {{ article }}) * added an exception when a child template has a non-empty body (as it is always ignored when rendering) -* 0.9.6 (2010-05-12) +# 0.9.6 (2010-05-12) * fixed variables defined outside a loop and for which the value changes in a for loop * fixed the test suite for PHP 5.2 and older versions of PHPUnit @@ -1028,7 +1044,7 @@ Backward incompatibilities: * added support for escaping strategy in the autoescape tag * fixed lexer when a template has a big chunk of text between/in a block -* 0.9.5 (2010-01-20) +# 0.9.5 (2010-01-20) As for any new release, don't forget to remove all cached templates after upgrading. @@ -1065,7 +1081,7 @@ stable). * added support for arrays (same behavior as in PHP, a mix between lists and dictionaries, arrays and hashes) * enhanced some error messages to provide better feedback in case of parsing errors -* 0.9.4 (2009-12-02) +# 0.9.4 (2009-12-02) If you have custom loaders, you MUST upgrade them for this release: The Twig_Loader base class has been removed, and the Twig_LoaderInterface has also @@ -1078,7 +1094,7 @@ been changed (see the source code for more information or the documentation). * fixed bug when the filename of a template contains */ * refactored loaders -* 0.9.3 (2009-11-11) +# 0.9.3 (2009-11-11) This release is NOT backward compatible with the previous releases. @@ -1107,7 +1123,7 @@ This release is NOT backward compatible with the previous releases. * extended set tag to support expression as value ({% set foo as 'foo' ~ 'bar' %} ) * fixed bug when \ was used in HTML -* 0.9.2 (2009-10-29) +# 0.9.2 (2009-10-29) * made some speed optimizations * changed the cache extension to .php @@ -1125,7 +1141,7 @@ This release is NOT backward compatible with the previous releases. * enhanced some error messages to ease debugging * fixed empty cache files when the template contains an error -* 0.9.1 (2009-10-14) +# 0.9.1 (2009-10-14) * fixed a bug in PHP 5.2.6 * fixed numbers with one than one decimal @@ -1133,6 +1149,6 @@ This release is NOT backward compatible with the previous releases. * made small speed optimizations * made minor tweaks to allow better extensibility and flexibility -* 0.9.0 (2009-10-12) +# 0.9.0 (2009-10-12) * Initial release diff --git a/lib/twig/twig/LICENSE b/lib/twig/twig/LICENSE index 5e8a0b8b9..94255bb2d 100644 --- a/lib/twig/twig/LICENSE +++ b/lib/twig/twig/LICENSE @@ -1,29 +1,27 @@ Copyright (c) 2009-2020 by the Twig Team. -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: +All rights reserved. - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: - * Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials provided - with the distribution. - - * The names of the contributors may not be used to endorse or - promote products derived from this software without specific - prior written permission. + * Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + * Neither the name of Twig nor the names of its contributors + may be used to endorse or promote products derived from this software + without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR +CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/lib/twig/twig/composer.json b/lib/twig/twig/composer.json index c306353a9..d4e096dc5 100644 --- a/lib/twig/twig/composer.json +++ b/lib/twig/twig/composer.json @@ -5,6 +5,7 @@ "keywords": ["templating"], "homepage": "https://twig.symfony.com", "license": "BSD-3-Clause", + "minimum-stability": "dev", "authors": [ { "name": "Fabien Potencier", @@ -23,11 +24,11 @@ } ], "require": { - "php": ">=5.5.0", + "php": ">=7.1.3", "symfony/polyfill-ctype": "^1.8" }, "require-dev": { - "symfony/phpunit-bridge": "^4.4|^5.0", + "symfony/phpunit-bridge": "^4.4.9|^5.0.9", "psr/container": "^1.0" }, "autoload": { @@ -45,7 +46,7 @@ }, "extra": { "branch-alias": { - "dev-master": "1.42-dev" + "dev-master": "1.43-dev" } } } diff --git a/lib/twig/twig/lib/Twig/Loader/String.php b/lib/twig/twig/lib/Twig/Loader/String.php index 348af0c1d..cb3b2a004 100644 --- a/lib/twig/twig/lib/Twig/Loader/String.php +++ b/lib/twig/twig/lib/Twig/Loader/String.php @@ -36,7 +36,7 @@ class Twig_Loader_String implements LoaderInterface, ExistsLoaderInterface, Sour { public function getSource($name) { - @trigger_error(sprintf('Calling "getSource" on "%s" is deprecated since 1.27. Use getSourceContext() instead.', \get_class($this)), E_USER_DEPRECATED); + @trigger_error(sprintf('Calling "getSource" on "%s" is deprecated since 1.27. Use getSourceContext() instead.', static::class), E_USER_DEPRECATED); return $name; } diff --git a/lib/twig/twig/src/Environment.php b/lib/twig/twig/src/Environment.php index 97fa4c4db..bef7aef33 100644 --- a/lib/twig/twig/src/Environment.php +++ b/lib/twig/twig/src/Environment.php @@ -35,17 +35,17 @@ use Twig\RuntimeLoader\RuntimeLoaderInterface; use Twig\TokenParser\TokenParserInterface; /** - * Stores the Twig configuration. + * Stores the Twig configuration and renders templates. * * @author Fabien Potencier */ class Environment { - const VERSION = '1.42.5'; - const VERSION_ID = 14205; + const VERSION = '1.43.1'; + const VERSION_ID = 14301; const MAJOR_VERSION = 1; - const MINOR_VERSION = 42; - const RELEASE_VERSION = 5; + const MINOR_VERSION = 43; + const RELEASE_VERSION = 1; const EXTRA_VERSION = ''; protected $charset; diff --git a/lib/twig/twig/src/ExpressionParser.php b/lib/twig/twig/src/ExpressionParser.php index a3ff72530..0e0a12a82 100644 --- a/lib/twig/twig/src/ExpressionParser.php +++ b/lib/twig/twig/src/ExpressionParser.php @@ -598,6 +598,11 @@ class ExpressionParser while (!$stream->test(Token::PUNCTUATION_TYPE, ')')) { if (!empty($args)) { $stream->expect(Token::PUNCTUATION_TYPE, ',', 'Arguments must be separated by a comma'); + + // if the comma above was a trailing comma, early exit the argument parse loop + if ($stream->test(Token::PUNCTUATION_TYPE, ')')) { + break; + } } if ($definition) { @@ -740,7 +745,7 @@ class ExpressionParser $message .= sprintf('. Use "%s" instead', $test->getAlternative()); } $src = $stream->getSourceContext(); - $message .= sprintf(' in %s at line %d.', $src->getPath() ? $src->getPath() : $src->getName(), $stream->getCurrent()->getLine()); + $message .= sprintf(' in %s at line %d.', $src->getPath() ?: $src->getName(), $stream->getCurrent()->getLine()); @trigger_error($message, E_USER_DEPRECATED); } @@ -770,7 +775,7 @@ class ExpressionParser $message .= sprintf('. Use "%s" instead', $function->getAlternative()); } $src = $this->parser->getStream()->getSourceContext(); - $message .= sprintf(' in %s at line %d.', $src->getPath() ? $src->getPath() : $src->getName(), $line); + $message .= sprintf(' in %s at line %d.', $src->getPath() ?: $src->getName(), $line); @trigger_error($message, E_USER_DEPRECATED); } @@ -800,7 +805,7 @@ class ExpressionParser $message .= sprintf('. Use "%s" instead', $filter->getAlternative()); } $src = $this->parser->getStream()->getSourceContext(); - $message .= sprintf(' in %s at line %d.', $src->getPath() ? $src->getPath() : $src->getName(), $line); + $message .= sprintf(' in %s at line %d.', $src->getPath() ?: $src->getName(), $line); @trigger_error($message, E_USER_DEPRECATED); } diff --git a/lib/twig/twig/src/Extension/AbstractExtension.php b/lib/twig/twig/src/Extension/AbstractExtension.php index fa3245b29..cabe7182c 100644 --- a/lib/twig/twig/src/Extension/AbstractExtension.php +++ b/lib/twig/twig/src/Extension/AbstractExtension.php @@ -65,7 +65,7 @@ abstract class AbstractExtension implements ExtensionInterface */ public function getName() { - return \get_class($this); + return static::class; } } diff --git a/lib/twig/twig/src/Extension/CoreExtension.php b/lib/twig/twig/src/Extension/CoreExtension.php index 5ff1e39ee..a17af0606 100644 --- a/lib/twig/twig/src/Extension/CoreExtension.php +++ b/lib/twig/twig/src/Extension/CoreExtension.php @@ -194,9 +194,9 @@ class CoreExtension extends AbstractExtension new TwigFilter('sort', 'twig_sort_filter'), new TwigFilter('merge', 'twig_array_merge'), new TwigFilter('batch', 'twig_array_batch'), - new TwigFilter('filter', 'twig_array_filter'), - new TwigFilter('map', 'twig_array_map'), - new TwigFilter('reduce', 'twig_array_reduce'), + new TwigFilter('filter', 'twig_array_filter', ['needs_environment' => true]), + new TwigFilter('map', 'twig_array_map', ['needs_environment' => true]), + new TwigFilter('reduce', 'twig_array_reduce', ['needs_environment' => true]), // string/array filters new TwigFilter('reverse', 'twig_reverse_filter', ['needs_environment' => true]), @@ -539,11 +539,11 @@ function twig_replace_filter($str, $from, $to = null) */ function twig_round($value, $precision = 0, $method = 'common') { - if ('common' == $method) { + if ('common' === $method) { return round($value, $precision); } - if ('ceil' != $method && 'floor' != $method) { + if ('ceil' !== $method && 'floor' !== $method) { throw new RuntimeError('The round filter only supports the "common", "ceil", and "floor" methods.'); } @@ -1214,7 +1214,7 @@ function _twig_escape_js_callback($matches) /* * A few characters have short escape sequences in JSON and JavaScript. - * Escape sequences supported only by JavaScript, not JSON, are ommitted. + * Escape sequences supported only by JavaScript, not JSON, are omitted. * \" is also supported but omitted, because the resulting string is not HTML safe. */ static $shortMap = [ @@ -1504,7 +1504,7 @@ function twig_to_array($seq, $preserveKeys = true) function twig_test_empty($value) { if ($value instanceof \Countable) { - return 0 == \count($value); + return 0 === \count($value); } if ($value instanceof \Traversable) { @@ -1693,8 +1693,16 @@ function twig_array_batch($items, $size, $fill = null, $preserveKeys = true) return $result; } -function twig_array_filter($array, $arrow) +function twig_array_filter(Environment $env, $array, $arrow) { + if (!twig_test_iterable($array)) { + throw new RuntimeError(sprintf('The "filter" filter expects an array or "Traversable", got "%s".', \is_object($array) ? \get_class($array) : \gettype($array))); + } + + if (!$arrow instanceof Closure && $env->hasExtension('\Twig\Extension\SandboxExtension') && $env->getExtension('\Twig\Extension\SandboxExtension')->isSandboxed()) { + throw new RuntimeError('The callable passed to "filter" filter must be a Closure in sandbox mode.'); + } + if (\is_array($array)) { if (\PHP_VERSION_ID >= 50600) { return array_filter($array, $arrow, \ARRAY_FILTER_USE_BOTH); @@ -1707,8 +1715,12 @@ function twig_array_filter($array, $arrow) return new \CallbackFilterIterator(new \IteratorIterator($array), $arrow); } -function twig_array_map($array, $arrow) +function twig_array_map(Environment $env, $array, $arrow) { + if (!$arrow instanceof Closure && $env->hasExtension('\Twig\Extension\SandboxExtension') && $env->getExtension('\Twig\Extension\SandboxExtension')->isSandboxed()) { + throw new RuntimeError('The callable passed to the "map" filter must be a Closure in sandbox mode.'); + } + $r = []; foreach ($array as $k => $v) { $r[$k] = $arrow($v, $k); @@ -1717,8 +1729,12 @@ function twig_array_map($array, $arrow) return $r; } -function twig_array_reduce($array, $arrow, $initial = null) +function twig_array_reduce(Environment $env, $array, $arrow, $initial = null) { + if (!$arrow instanceof Closure && $env->hasExtension('\Twig\Extension\SandboxExtension') && $env->getExtension('\Twig\Extension\SandboxExtension')->isSandboxed()) { + throw new RuntimeError('The callable passed to the "reduce" filter must be a Closure in sandbox mode.'); + } + if (!\is_array($array)) { $array = iterator_to_array($array); } diff --git a/lib/twig/twig/src/Extension/ProfilerExtension.php b/lib/twig/twig/src/Extension/ProfilerExtension.php index 7b21b9fa5..ad494585b 100644 --- a/lib/twig/twig/src/Extension/ProfilerExtension.php +++ b/lib/twig/twig/src/Extension/ProfilerExtension.php @@ -41,7 +41,7 @@ class ProfilerExtension extends AbstractExtension public function getNodeVisitors() { - return [new ProfilerNodeVisitor(\get_class($this))]; + return [new ProfilerNodeVisitor(static::class)]; } public function getName() diff --git a/lib/twig/twig/src/Lexer.php b/lib/twig/twig/src/Lexer.php index 697a6cfa1..6fb8dd062 100644 --- a/lib/twig/twig/src/Lexer.php +++ b/lib/twig/twig/src/Lexer.php @@ -499,11 +499,15 @@ class Lexer implements \Twig_LexerInterface $regex = []; foreach ($operators as $operator => $length) { // an operator that ends with a character must be followed by - // a whitespace or a parenthesis + // a whitespace, a parenthesis, an opening map [ or sequence { + $r = preg_quote($operator, '/'); if (ctype_alpha($operator[$length - 1])) { - $r = preg_quote($operator, '/').'(?=[\s()])'; - } else { - $r = preg_quote($operator, '/'); + $r .= '(?=[\s()\[{])'; + } + + // an operator that begins with a character must not have a dot or pipe before + if (ctype_alpha($operator[0])) { + $r = '(?templates[$name])) { diff --git a/lib/twig/twig/src/Loader/ChainLoader.php b/lib/twig/twig/src/Loader/ChainLoader.php index 25ac55a33..d1c086700 100644 --- a/lib/twig/twig/src/Loader/ChainLoader.php +++ b/lib/twig/twig/src/Loader/ChainLoader.php @@ -52,7 +52,7 @@ class ChainLoader implements LoaderInterface, ExistsLoaderInterface, SourceConte public function getSource($name) { - @trigger_error(sprintf('Calling "getSource" on "%s" is deprecated since 1.27. Use getSourceContext() instead.', \get_class($this)), E_USER_DEPRECATED); + @trigger_error(sprintf('Calling "getSource" on "%s" is deprecated since 1.27. Use getSourceContext() instead.', static::class), E_USER_DEPRECATED); $exceptions = []; foreach ($this->loaders as $loader) { diff --git a/lib/twig/twig/src/Loader/FilesystemLoader.php b/lib/twig/twig/src/Loader/FilesystemLoader.php index 19b43a295..54303ffda 100644 --- a/lib/twig/twig/src/Loader/FilesystemLoader.php +++ b/lib/twig/twig/src/Loader/FilesystemLoader.php @@ -138,7 +138,7 @@ class FilesystemLoader implements LoaderInterface, ExistsLoaderInterface, Source public function getSource($name) { - @trigger_error(sprintf('Calling "getSource" on "%s" is deprecated since 1.27. Use getSourceContext() instead.', \get_class($this)), E_USER_DEPRECATED); + @trigger_error(sprintf('Calling "getSource" on "%s" is deprecated since 1.27. Use getSourceContext() instead.', static::class), E_USER_DEPRECATED); if (null === ($path = $this->findTemplate($name)) || false === $path) { return ''; @@ -180,7 +180,7 @@ class FilesystemLoader implements LoaderInterface, ExistsLoaderInterface, Source try { return null !== ($path = $this->findTemplate($name, false)) && false !== $path; } catch (LoaderError $e) { - @trigger_error(sprintf('In %s::findTemplate(), you must accept a second argument that when set to "false" returns "false" instead of throwing an exception. Not supporting this argument is deprecated since version 1.27.', \get_class($this)), E_USER_DEPRECATED); + @trigger_error(sprintf('In %s::findTemplate(), you must accept a second argument that when set to "false" returns "false" instead of throwing an exception. Not supporting this argument is deprecated since version 1.27.', static::class), E_USER_DEPRECATED); return false; } diff --git a/lib/twig/twig/src/Node/EmbedNode.php b/lib/twig/twig/src/Node/EmbedNode.php index 05051ecec..dde3db1bd 100644 --- a/lib/twig/twig/src/Node/EmbedNode.php +++ b/lib/twig/twig/src/Node/EmbedNode.php @@ -23,7 +23,7 @@ use Twig\Node\Expression\ConstantExpression; class EmbedNode extends IncludeNode { // we don't inject the module to avoid node visitors to traverse it twice (as it will be already visited in the main module) - public function __construct($name, $index, AbstractExpression $variables = null, $only = false, $ignoreMissing = false, $lineno, $tag = null) + public function __construct($name, $index, ?AbstractExpression $variables, $only, $ignoreMissing, $lineno, $tag = null) { parent::__construct(new ConstantExpression('not_used', $lineno), $variables, $only, $ignoreMissing, $lineno, $tag); diff --git a/lib/twig/twig/src/Node/Expression/BlockReferenceExpression.php b/lib/twig/twig/src/Node/Expression/BlockReferenceExpression.php index 0a56849c7..7e3c3e484 100644 --- a/lib/twig/twig/src/Node/Expression/BlockReferenceExpression.php +++ b/lib/twig/twig/src/Node/Expression/BlockReferenceExpression.php @@ -25,7 +25,7 @@ class BlockReferenceExpression extends AbstractExpression /** * @param Node|null $template */ - public function __construct(\Twig_NodeInterface $name, $template = null, $lineno, $tag = null) + public function __construct(\Twig_NodeInterface $name, $template, $lineno, $tag = null) { if (\is_bool($template)) { @trigger_error(sprintf('The %s method "$asString" argument is deprecated since version 1.28 and will be removed in 2.0.', __METHOD__), E_USER_DEPRECATED); diff --git a/lib/twig/twig/src/Node/Expression/CallExpression.php b/lib/twig/twig/src/Node/Expression/CallExpression.php index d202a7395..0459dae08 100644 --- a/lib/twig/twig/src/Node/Expression/CallExpression.php +++ b/lib/twig/twig/src/Node/Expression/CallExpression.php @@ -254,7 +254,8 @@ abstract class CallExpression extends AbstractExpression } if ($isVariadic) { $argument = end($parameters); - if ($argument && $argument->isArray() && $argument->isDefaultValueAvailable() && [] === $argument->getDefaultValue()) { + $isArray = $argument && $argument->hasType() && 'array' === $argument->getType()->getName(); + if ($isArray && $argument->isDefaultValueAvailable() && [] === $argument->getDefaultValue()) { array_pop($parameters); } else { $callableName = $r->name; diff --git a/lib/twig/twig/src/Node/Expression/GetAttrExpression.php b/lib/twig/twig/src/Node/Expression/GetAttrExpression.php index b790bf7af..06511c773 100644 --- a/lib/twig/twig/src/Node/Expression/GetAttrExpression.php +++ b/lib/twig/twig/src/Node/Expression/GetAttrExpression.php @@ -17,7 +17,7 @@ use Twig\Template; class GetAttrExpression extends AbstractExpression { - public function __construct(AbstractExpression $node, AbstractExpression $attribute, AbstractExpression $arguments = null, $type, $lineno) + public function __construct(AbstractExpression $node, AbstractExpression $attribute, ?AbstractExpression $arguments, string $type, int $lineno) { $nodes = ['node' => $node, 'attribute' => $attribute]; if (null !== $arguments) { diff --git a/lib/twig/twig/src/Node/Expression/NameExpression.php b/lib/twig/twig/src/Node/Expression/NameExpression.php index d3f7d107f..e7be5ff54 100644 --- a/lib/twig/twig/src/Node/Expression/NameExpression.php +++ b/lib/twig/twig/src/Node/Expression/NameExpression.php @@ -36,7 +36,7 @@ class NameExpression extends AbstractExpression if ($this->getAttribute('is_defined_test')) { if ($this->isSpecial()) { $compiler->repr(true); - } elseif (\PHP_VERSION_ID >= 700400) { + } elseif (\PHP_VERSION_ID >= 70400) { $compiler ->raw('array_key_exists(') ->string($name) diff --git a/lib/twig/twig/src/Node/Expression/Test/DefinedTest.php b/lib/twig/twig/src/Node/Expression/Test/DefinedTest.php index 2222e11cf..e2b3a0b8a 100644 --- a/lib/twig/twig/src/Node/Expression/Test/DefinedTest.php +++ b/lib/twig/twig/src/Node/Expression/Test/DefinedTest.php @@ -33,7 +33,7 @@ use Twig\Node\Expression\TestExpression; */ class DefinedTest extends TestExpression { - public function __construct(\Twig_NodeInterface $node, $name, \Twig_NodeInterface $arguments = null, $lineno) + public function __construct(\Twig_NodeInterface $node, $name, ?\Twig_NodeInterface $arguments, $lineno) { if ($node instanceof NameExpression) { $node->setAttribute('is_defined_test', true); diff --git a/lib/twig/twig/src/Node/Expression/TestExpression.php b/lib/twig/twig/src/Node/Expression/TestExpression.php index 8fc31d3aa..fa3c18fbf 100644 --- a/lib/twig/twig/src/Node/Expression/TestExpression.php +++ b/lib/twig/twig/src/Node/Expression/TestExpression.php @@ -16,7 +16,7 @@ use Twig\TwigTest; class TestExpression extends CallExpression { - public function __construct(\Twig_NodeInterface $node, $name, \Twig_NodeInterface $arguments = null, $lineno) + public function __construct(\Twig_NodeInterface $node, $name, ?\Twig_NodeInterface $arguments, $lineno) { $nodes = ['node' => $node]; if (null !== $arguments) { diff --git a/lib/twig/twig/src/Node/ForNode.php b/lib/twig/twig/src/Node/ForNode.php index 49409a39b..111da37ea 100644 --- a/lib/twig/twig/src/Node/ForNode.php +++ b/lib/twig/twig/src/Node/ForNode.php @@ -25,7 +25,7 @@ class ForNode extends Node { protected $loop; - public function __construct(AssignNameExpression $keyTarget, AssignNameExpression $valueTarget, AbstractExpression $seq, AbstractExpression $ifexpr = null, \Twig_NodeInterface $body, \Twig_NodeInterface $else = null, $lineno, $tag = null) + public function __construct(AssignNameExpression $keyTarget, AssignNameExpression $valueTarget, AbstractExpression $seq, ?AbstractExpression $ifexpr, \Twig_NodeInterface $body, ?\Twig_NodeInterface $else, $lineno, $tag = null) { $body = new Node([$body, $this->loop = new ForLoopNode($lineno, $tag)]); diff --git a/lib/twig/twig/src/Node/IfNode.php b/lib/twig/twig/src/Node/IfNode.php index 4836d91f0..da2ad344a 100644 --- a/lib/twig/twig/src/Node/IfNode.php +++ b/lib/twig/twig/src/Node/IfNode.php @@ -21,7 +21,7 @@ use Twig\Compiler; */ class IfNode extends Node { - public function __construct(\Twig_NodeInterface $tests, \Twig_NodeInterface $else = null, $lineno, $tag = null) + public function __construct(\Twig_NodeInterface $tests, ?\Twig_NodeInterface $else, $lineno, $tag = null) { $nodes = ['tests' => $tests]; if (null !== $else) { diff --git a/lib/twig/twig/src/Node/IncludeNode.php b/lib/twig/twig/src/Node/IncludeNode.php index 544db81ea..d0b6184c8 100644 --- a/lib/twig/twig/src/Node/IncludeNode.php +++ b/lib/twig/twig/src/Node/IncludeNode.php @@ -22,7 +22,7 @@ use Twig\Node\Expression\AbstractExpression; */ class IncludeNode extends Node implements NodeOutputInterface { - public function __construct(AbstractExpression $expr, AbstractExpression $variables = null, $only = false, $ignoreMissing = false, $lineno, $tag = null) + public function __construct(AbstractExpression $expr, ?AbstractExpression $variables, $only, $ignoreMissing, $lineno, $tag = null) { $nodes = ['expr' => $expr]; if (null !== $variables) { diff --git a/lib/twig/twig/src/Node/ModuleNode.php b/lib/twig/twig/src/Node/ModuleNode.php index aab2aa33f..89d602b97 100644 --- a/lib/twig/twig/src/Node/ModuleNode.php +++ b/lib/twig/twig/src/Node/ModuleNode.php @@ -28,7 +28,7 @@ use Twig\Source; */ class ModuleNode extends Node { - public function __construct(\Twig_NodeInterface $body, AbstractExpression $parent = null, \Twig_NodeInterface $blocks, \Twig_NodeInterface $macros, \Twig_NodeInterface $traits, $embeddedTemplates, $name, $source = '') + public function __construct(\Twig_NodeInterface $body, ?AbstractExpression $parent, \Twig_NodeInterface $blocks, \Twig_NodeInterface $macros, \Twig_NodeInterface $traits, $embeddedTemplates, $name, $source = '') { if (!$name instanceof Source) { @trigger_error(sprintf('Passing a string as the $name argument of %s() is deprecated since version 1.27. Pass a \Twig\Source instance instead.', __METHOD__), E_USER_DEPRECATED); diff --git a/lib/twig/twig/src/Node/Node.php b/lib/twig/twig/src/Node/Node.php index c890feb72..5ec7a73f4 100644 --- a/lib/twig/twig/src/Node/Node.php +++ b/lib/twig/twig/src/Node/Node.php @@ -40,7 +40,7 @@ class Node implements \Twig_NodeInterface { foreach ($nodes as $name => $node) { if (!$node instanceof \Twig_NodeInterface) { - @trigger_error(sprintf('Using "%s" for the value of node "%s" of "%s" is deprecated since version 1.25 and will be removed in 2.0.', \is_object($node) ? \get_class($node) : (null === $node ? 'null' : \gettype($node)), $name, \get_class($this)), E_USER_DEPRECATED); + @trigger_error(sprintf('Using "%s" for the value of node "%s" of "%s" is deprecated since version 1.25 and will be removed in 2.0.', \is_object($node) ? \get_class($node) : (null === $node ? 'null' : \gettype($node)), $name, static::class), E_USER_DEPRECATED); } } $this->nodes = $nodes; @@ -56,7 +56,7 @@ class Node implements \Twig_NodeInterface $attributes[] = sprintf('%s: %s', $name, str_replace("\n", '', var_export($value, true))); } - $repr = [\get_class($this).'('.implode(', ', $attributes)]; + $repr = [static::class.'('.implode(', ', $attributes)]; if (\count($this->nodes)) { foreach ($this->nodes as $name => $node) { @@ -89,7 +89,7 @@ class Node implements \Twig_NodeInterface $dom->appendChild($xml = $dom->createElement('twig')); $xml->appendChild($node = $dom->createElement('node')); - $node->setAttribute('class', \get_class($this)); + $node->setAttribute('class', static::class); foreach ($this->attributes as $name => $value) { $node->appendChild($attribute = $dom->createElement('attribute')); @@ -153,7 +153,7 @@ class Node implements \Twig_NodeInterface public function getAttribute($name) { if (!\array_key_exists($name, $this->attributes)) { - throw new \LogicException(sprintf('Attribute "%s" does not exist for Node "%s".', $name, \get_class($this))); + throw new \LogicException(sprintf('Attribute "%s" does not exist for Node "%s".', $name, static::class)); } return $this->attributes[$name]; @@ -187,7 +187,7 @@ class Node implements \Twig_NodeInterface public function getNode($name) { if (!\array_key_exists($name, $this->nodes)) { - throw new \LogicException(sprintf('Node "%s" does not exist for Node "%s".', $name, \get_class($this))); + throw new \LogicException(sprintf('Node "%s" does not exist for Node "%s".', $name, static::class)); } return $this->nodes[$name]; @@ -196,7 +196,7 @@ class Node implements \Twig_NodeInterface public function setNode($name, $node = null) { if (!$node instanceof \Twig_NodeInterface) { - @trigger_error(sprintf('Using "%s" for the value of node "%s" of "%s" is deprecated since version 1.25 and will be removed in 2.0.', \is_object($node) ? \get_class($node) : (null === $node ? 'null' : \gettype($node)), $name, \get_class($this)), E_USER_DEPRECATED); + @trigger_error(sprintf('Using "%s" for the value of node "%s" of "%s" is deprecated since version 1.25 and will be removed in 2.0.', \is_object($node) ? \get_class($node) : (null === $node ? 'null' : \gettype($node)), $name, static::class), E_USER_DEPRECATED); } $this->nodes[$name] = $node; @@ -236,7 +236,7 @@ class Node implements \Twig_NodeInterface { $this->sourceContext = $source; foreach ($this->nodes as $node) { - if ($node instanceof Node) { + if ($node instanceof self) { $node->setSourceContext($source); } } diff --git a/lib/twig/twig/src/Node/SandboxNode.php b/lib/twig/twig/src/Node/SandboxNode.php index 2d644c3a1..3dcd4d8fa 100644 --- a/lib/twig/twig/src/Node/SandboxNode.php +++ b/lib/twig/twig/src/Node/SandboxNode.php @@ -34,12 +34,19 @@ class SandboxNode extends Node ->write("\$this->sandbox->enableSandbox();\n") ->outdent() ->write("}\n") + ->write("try {\n") + ->indent() ->subcompile($this->getNode('body')) + ->outdent() + ->write("} finally {\n") + ->indent() ->write("if (!\$alreadySandboxed) {\n") ->indent() ->write("\$this->sandbox->disableSandbox();\n") ->outdent() ->write("}\n") + ->outdent() + ->write("}\n") ; } } diff --git a/lib/twig/twig/src/Node/WithNode.php b/lib/twig/twig/src/Node/WithNode.php index f5ae9246d..d291dcf9a 100644 --- a/lib/twig/twig/src/Node/WithNode.php +++ b/lib/twig/twig/src/Node/WithNode.php @@ -20,7 +20,7 @@ use Twig\Compiler; */ class WithNode extends Node { - public function __construct(Node $body, Node $variables = null, $only = false, $lineno, $tag = null) + public function __construct(Node $body, ?Node $variables, $only, $lineno, $tag = null) { $nodes = ['body' => $body]; if (null !== $variables) { diff --git a/lib/twig/twig/src/Template.php b/lib/twig/twig/src/Template.php index 704125e53..d06272907 100644 --- a/lib/twig/twig/src/Template.php +++ b/lib/twig/twig/src/Template.php @@ -111,8 +111,6 @@ abstract class Template implements \Twig_TemplateInterface * This method is for internal use only and should never be called * directly. * - * @param array $context - * * @return \Twig_TemplateInterface|TemplateWrapper|false The parent template or false if there is no parent * * @internal @@ -366,7 +364,7 @@ abstract class Template implements \Twig_TemplateInterface } if ($template === $this->getTemplateName()) { - $class = \get_class($this); + $class = static::class; if (false !== $pos = strrpos($class, '___', -1)) { $class = substr($class, 0, $pos); } diff --git a/lib/twig/twig/src/TokenParser/ApplyTokenParser.php b/lib/twig/twig/src/TokenParser/ApplyTokenParser.php index 879879a2b..c75e5ef8a 100644 --- a/lib/twig/twig/src/TokenParser/ApplyTokenParser.php +++ b/lib/twig/twig/src/TokenParser/ApplyTokenParser.php @@ -22,7 +22,7 @@ use Twig\Token; * * {% apply upper %} * This text becomes uppercase - * {% endapplys %} + * {% endapply %} */ final class ApplyTokenParser extends AbstractTokenParser {