Commit Graph

33 Commits

Author SHA1 Message Date
Fabien Potencier 3c89f82d4a Cleanup 4.x - Stop detecting echo and print in compiled nodes 2026-09-23 10:50:26 +01:00
Fabien Potencier 8dd0383353 Merge branch '3.x' into 4.x
* 3.x: (23 commits)
  Bump version
  Prepare the 3.26.0 release
  Update CHANGELOG
  Document that the sandbox doesn't protect against resource exhaustion
  Document template_from_string caveats when used in a sandboxed env
  Pre-escape HTML input on the `spaceless` filter
  Add docs on Markup about the goal of this class in the context of a sandbox
  Fix sandbox bypass in the "column" filter
  Fix sandbox `__toString` bypasses
  Validate macro name in MacroReferenceExpression constructor
  Fix sandbox bypass: PHP code injection via _self / import macro reference
  Fix deprecations in tests
  Fix sandbox bypass in the `{% sandbox %}` tag when including a preloaded template
  Encode single quotes as \x27 in Compiler::string()
  Fix sandbox bypass: PHP code injection via {% use %} template name
  Fix unbounded memoisation of `IntlDateFormatter` / `NumberFormatter`
  Fix deprecation
  [Profiler] Escape template and profile names in HtmlDumper
  Bump version
  Fix sandbox bypass: propagate sandbox state to checkArrow for source-policy sandboxing
  ...

# Conflicts:
#	CHANGELOG
#	doc/filters/spaceless.rst
#	extra/cssinliner-extra/CssInlinerExtension.php
#	extra/inky-extra/InkyExtension.php
#	extra/markdown-extra/MarkdownExtension.php
#	src/Environment.php
#	src/ExpressionParser/Infix/DotExpressionParser.php
#	src/Extension/CoreExtension.php
#	src/Node/Expression/FilterExpression.php
#	src/Node/Expression/FunctionExpression.php
#	src/Node/Expression/TestExpression.php
#	src/Node/ModuleNode.php
#	src/NodeVisitor/SandboxNodeVisitor.php
#	src/Resources/core.php
#	src/TokenParser/SandboxTokenParser.php
#	tests/Extension/SandboxTest.php
2026-05-21 13:58:45 +02:00
Fabien Potencier 679447fa29 Encode single quotes as \x27 in Compiler::string()
This is a defense-in-depth measure: callers must always concatenate the
result into a double-quoted PHP context, but if one ever (mistakenly)
embeds it inside a single-quoted PHP literal, an attacker-controlled
single quote in the source value could break out of that context. The
previous commit fixed exactly such a bug in ModuleNode for the {% use %}
template name.

Encoding ' as the hex escape \x27 guarantees that the emitted PHP source
never contains a literal single quote derived from user input, while the
decoded runtime value is unchanged. \' is not used because it is not a
recognized escape sequence in PHP double-quoted strings (the backslash
would be kept literally).
2026-05-19 22:58:27 +02:00
Fabien Potencier 151aa4ecda Fix CS 2025-02-14 12:57:03 +01:00
Fabien Potencier aaf4a50804 Merge branch '3.x' into 4.x
* 3.x:
  Fix CS
  Use [] instead of array() to represent a constant value in compiled code
  Add more coding standard rules
2024-11-30 09:36:36 +01:00
Fabien Potencier 49f384f107 Use [] instead of array() to represent a constant value in compiled code 2024-11-29 21:57:12 +01:00
Fabien Potencier 9d9c9d81e9 Improve YieldReady support docs 2024-11-11 09:38:36 +01:00
Fabien Potencier ede4658728 Fix missing sprintf 2024-10-24 19:24:55 +02:00
Fabien Potencier ef63506239 Merge branch '3.x' into 4.x
* 3.x:
  Improve ImportNode impl
  Rename Node classes related to variables
2024-10-24 07:57:29 +02:00
Fabien Potencier fc15e7ccbc Rename Node classes related to variables 2024-10-23 12:36:57 +02:00
Fabien Potencier b949556093 Fix merge 2024-08-30 12:39:46 +02:00
Fabien Potencier 61aa645a30 Merge branch '3.x' into 4.x
* 3.x:
  Fix doc markup
  Add an example on how to iterate over a string
  Remove NodeCaptureInterface from TypesNode
  Use CPP in full code base
  Add types tag
  Bump version
  Bump version
  Prepare the 3.12.0 release
  Fix CS
  Add conditional return types to `ensureTraversable`
  Add return type `isTraitable`
2024-08-30 12:38:56 +02:00
andreybolonin1989@gmail.com 28923f4269 Use CPP in full code base 2024-08-29 19:29:39 +02:00
Fabien Potencier c250afdda0 Optimize sprintf() calls for PHP 8.4 2024-06-21 08:27:51 +02:00
Fabien Potencier 67cb9a06fe Merge branch '3.x' into 4.x
* 3.x:
  Update PHPUnit config
  Optimize sprintf() calls for PHP 8.4
2024-06-21 08:27:27 +02:00
Fabien Potencier b63bde3063 Optimize sprintf() calls for PHP 8.4 2024-06-21 08:16:55 +02:00
Fabien Potencier f582a3e381 Fix CS 2024-05-01 16:41:44 +02:00
Nicolas Grekas 1af9ad0c3e Merge branch '3.x' into 4.x
* 3.x:
  Add `#[YieldReady]` to allow extensions to tell when they're ready for yielding
2024-02-15 11:47:41 +01:00
Nicolas Grekas e70777405d Add #[YieldReady] to allow extensions to tell when they're ready for yielding 2024-02-15 10:27:26 +01:00
Fabien Potencier e79c7a3984 Merge branch '3.x' into 4.x
* 3.x:
  Fix bug
  Tweak code
  Add a deprecation when a Node uses echo/print
  Fix tests
  Optimize code
  Add support for templates that do not have output Nodes
  -
  Remove some tests
  -
  Tweak code
  Remove the new yield nodes
  Remove usage of ob_* functions in favor of yielding
  Tweak CI output
2024-02-05 14:27:33 +01:00
Fabien Potencier 14d3803647 Add a deprecation when a Node uses echo/print 2024-01-25 13:09:58 +01:00
Fabien Potencier 35640b6d2d Add type hints to private properties 2023-12-14 20:43:37 +01:00
Fabien Potencier 824dbd9e21 Add Compile::reset() 2022-12-26 17:10:13 +01:00
Fabien Potencier 63b3ddd11a Merge branch '2.x' into 3.x
* 2.x:
  Hashing is not necessary to generate unique variable names during compilation
2021-12-14 15:28:12 -08:00
Jérôme Tamarelle ba2b4e6dfe Hashing is not necessary to generate unique variable names during compilation 2021-12-14 15:26:59 -08:00
Fabien Potencier 13e360972a Merge branch '2.x' into 3.x
* 2.x:
  Fix CS
  Fix CS
  Migrate to the new PHP CS Fixer config file
  Fixing links
2021-05-12 09:45:40 +02:00
Fabien Potencier 2dd1d909b9 Fix CS 2021-05-12 09:37:17 +02:00
Fabien Potencier 54cec4e3b8 added type hints 2019-04-26 12:01:21 +02:00
Fabien Potencier 273b666a71 removed the obsolete lib/ directory, removed PSR-0 class aliases 2019-04-23 16:34:05 +02:00
Fabien Potencier 037ee67224 switched to namespace first, PSR-0 as a fallback 2019-03-05 08:14:45 +01:00
Maxime Steinhausser 2c174e4015 Use class_exists instead of require 2017-06-05 23:42:50 +02:00
Nicolas Grekas 5420a5e3f8 Add the aliases 2017-05-25 08:32:07 +02:00
Nicolas Grekas 71af32b306 Add namespaced aliases 2017-05-24 10:12:32 +02:00