From: Charles Date: Thu, 8 Nov 2012 02:25:27 +0000 (+0700) Subject: Fix extension crash when calling unknown method inside a macro X-Git-Url: http://git.silmor.de/gitweb/?a=commitdiff_plain;h=55b76c1799fc221ead6ce82509bcdebf643d7d11;p=web%2Fkonrad%2Ftwig.git Fix extension crash when calling unknown method inside a macro --- diff --git a/ext/twig/twig.c b/ext/twig/twig.c index ef8cecb..1fea683 100644 --- a/ext/twig/twig.c +++ b/ext/twig/twig.c @@ -1022,22 +1022,27 @@ PHP_FUNCTION(twig_template_get_attributes) } /* if ($object instanceof Twig_TemplateInterface) { - return new Twig_Markup($ret, $this->env->getCharset()); + return $ret === '' ? '' : new Twig_Markup($ret, $this->env->getCharset()); } -*/ - if (TWIG_INSTANCE_OF_USERLAND(object, "Twig_TemplateInterface" TSRMLS_CC)) { - zval *charset = TWIG_CALL_USER_FUNC_ARRAY(TWIG_PROPERTY_CHAR(template, "env" TSRMLS_CC), "getCharset", NULL TSRMLS_CC); - TWIG_NEW(return_value, "Twig_Markup", ret, charset TSRMLS_CC); - zval_ptr_dtor(&charset); - if (ret) { - zval_ptr_dtor(&ret); - } - return; - } -/* + return $ret; */ + // ret can be null, if e.g. the called method throws an exception if (ret) { + if (TWIG_INSTANCE_OF_USERLAND(object, "Twig_TemplateInterface" TSRMLS_CC)) { + if (Z_STRVAL_P(ret) == "") { + free_ret = 1; + } else { + zval *charset = TWIG_CALL_USER_FUNC_ARRAY(TWIG_PROPERTY_CHAR(template, "env" TSRMLS_CC), "getCharset", NULL TSRMLS_CC); + TWIG_NEW(return_value, "Twig_Markup", ret, charset TSRMLS_CC); + zval_ptr_dtor(&charset); + if (ret) { + zval_ptr_dtor(&ret); + } + return; + } + } + RETVAL_ZVAL(ret, 1, 0); if (free_ret) { zval_ptr_dtor(&ret);