From 55b76c1799fc221ead6ce82509bcdebf643d7d11 Mon Sep 17 00:00:00 2001 From: Charles Date: Thu, 8 Nov 2012 09:25:27 +0700 Subject: [PATCH] Fix extension crash when calling unknown method inside a macro --- ext/twig/twig.c | 29 +++++++++++++++++------------ 1 files changed, 17 insertions(+), 12 deletions(-) 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); -- 1.7.2.5