fixed regression when calling a macro inside another one (closes #889)
authorFabien Potencier <fabien.potencier@gmail.com>
Thu, 8 Nov 2012 07:56:03 +0000 (08:56 +0100)
committerFabien Potencier <fabien.potencier@gmail.com>
Thu, 8 Nov 2012 07:57:26 +0000 (08:57 +0100)
CHANGELOG
lib/Twig/Node/Macro.php
test/Twig/Tests/Fixtures/macros/nested_calls.test [new file with mode: 0644]
test/Twig/Tests/Node/MacroTest.php

index b91e14b..5c8a3d8 100644 (file)
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -1,5 +1,6 @@
 * 1.11.1 (2012-XX-XX)
 
+ * 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)
 
index bdbef27..8bb5d9d 100644 (file)
@@ -76,7 +76,7 @@ class Twig_Node_Macro extends Twig_Node
             ->write("throw \$e;\n")
             ->outdent()
             ->write("}\n\n")
-            ->write("return ob_get_clean();\n")
+            ->write("return ('' === \$tmp = ob_get_clean()) ? '' : new Twig_Markup(\$tmp, \$this->env->getCharset());\n")
             ->outdent()
             ->write("}\n\n")
         ;
diff --git a/test/Twig/Tests/Fixtures/macros/nested_calls.test b/test/Twig/Tests/Fixtures/macros/nested_calls.test
new file mode 100644 (file)
index 0000000..cd25428
--- /dev/null
@@ -0,0 +1,18 @@
+--TEST--
+macro
+--TEMPLATE--
+{% import _self as macros %}
+
+{% macro foo(data) %}
+    {{ data }}
+{% endmacro %}
+
+{% macro bar() %}
+    <br />
+{% endmacro %}
+
+{{ macros.foo(macros.bar()) }}
+--DATA--
+return array();
+--EXPECT--
+<br />
index b6841d3..39e8131 100644 (file)
@@ -60,7 +60,7 @@ public function getfoo(\$_foo = null)
         throw \$e;
     }
 
-    return ob_get_clean();
+    return ('' === \$tmp = ob_get_clean()) ? '' : new Twig_Markup(\$tmp, \$this->env->getCharset());
 }
 EOF
             ),