Adding ignoreStrictCheck option for call_user_func_array, if throwing exception
authorBarta Tamás <barta.tamas.d@gmail.com>
Wed, 16 Oct 2013 20:49:43 +0000 (22:49 +0200)
committerFabien Potencier <fabien.potencier@gmail.com>
Tue, 3 Dec 2013 12:58:06 +0000 (13:58 +0100)
lib/Twig/Template.php

index d1e281d..8573d34 100644 (file)
@@ -446,7 +446,16 @@ abstract class Twig_Template implements Twig_TemplateInterface
             $this->env->getExtension('sandbox')->checkMethodAllowed($object, $method);
         }
 
-        $ret = call_user_func_array(array($object, $method), $arguments);
+        // Some objects throw exceptions when they have __call, and the method we try
+        // to call is not supported. If ignoreStrictCheck is true, we should return null.
+        try {
+            $ret = call_user_func_array(array($object, $method), $arguments);
+        } catch (\BadMethodCallException $e) {
+            if ($ignoreStrictCheck || !$this->env->isStrictVariables()) {
+                return null;
+            }
+            throw $e;
+        }
 
         // useful when calling a template method from a template
         // this is not supported but unfortunately heavily used in the Symfony profiler