fixed objects with __toString() not being autoescaped (fixes #111)
authorMark Story <mark@mark-story.com>
Tue, 24 Aug 2010 03:02:57 +0000 (23:02 -0400)
committerFabien Potencier <fabien.potencier@gmail.com>
Sun, 12 Sep 2010 05:44:26 +0000 (07:44 +0200)
CHANGELOG
lib/Twig/Extension/Core.php
test/Twig/Tests/Fixtures/tags/autoescape/objects.test

index 3018b7e..ae1e046 100644 (file)
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -5,6 +5,7 @@ Backward incompatibilities:
  * the odd and even filters are now tests:
      {{ foo|odd }} must now be written {{ foo is odd }}
 
+ * fixed objects with __toString() not being autoescaped
  * fixed subscript expressions when calling __call() (methods now keep the case)
  * added a "trans" filter
  * added "test" feature (accessible via the "is" operator)
index 60b51dc..6934fb3 100644 (file)
@@ -211,7 +211,7 @@ function twig_cycle_filter($values, $i)
  */
 function twig_escape_filter(Twig_Environment $env, $string, $type = 'html')
 {
-    if (!is_string($string)) {
+    if (!is_string($string) && !(is_object($string) && method_exists($string, '__toString'))) {
         return $string;
     }
 
index 44f41e1..12964a6 100644 (file)
@@ -4,6 +4,7 @@
 {% autoescape on %}
 {{ user.name }}
 {{ user.name|lower }}
+{{ user }}
 {% endautoescape %}
 --DATA--
 class UserForAutoEscapeTest
@@ -12,8 +13,14 @@ class UserForAutoEscapeTest
   {
     return 'Fabien<br />';
   }
+
+  public function __toString()
+  {
+     return 'Fabien<br />';
+  }
 }
 return array('user' => new UserForAutoEscapeTest())
 --EXPECT--
 Fabien&lt;br /&gt;
 fabien&lt;br /&gt;
+Fabien&lt;br /&gt;