diff options
author | Dmitry Stogov <dmitry@php.net> | 2009-04-02 09:56:33 +0000 |
---|---|---|
committer | Dmitry Stogov <dmitry@php.net> | 2009-04-02 09:56:33 +0000 |
commit | 875a27b7ede3d5b4e0a274017962f788d9176542 (patch) | |
tree | db1bebc213e33c433526607efddc3efa2a8f656e /ext/standard/type.c | |
parent | f18b366ec83675991754172d438833b8b5d9957a (diff) | |
download | php-git-875a27b7ede3d5b4e0a274017962f788d9176542.tar.gz |
Fixed bug #47851 (is_callable throws fatal error)
Diffstat (limited to 'ext/standard/type.c')
-rw-r--r-- | ext/standard/type.c | 16 |
1 files changed, 12 insertions, 4 deletions
diff --git a/ext/standard/type.c b/ext/standard/type.c index de64b86a76..a21df63e1b 100644 --- a/ext/standard/type.c +++ b/ext/standard/type.c @@ -358,21 +358,29 @@ PHP_FUNCTION(is_callable) { zval *var, **callable_name = NULL; char *name; + char *error; zend_bool retval; zend_bool syntax_only = 0; + int check_flags = 0; if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "z|bZ", &var, &syntax_only, &callable_name) == FAILURE) { return; } - - syntax_only = syntax_only ? IS_CALLABLE_CHECK_SYNTAX_ONLY : 0; + + if (syntax_only) { + check_flags |= IS_CALLABLE_CHECK_SYNTAX_ONLY; + } if (ZEND_NUM_ARGS() > 2) { - retval = zend_is_callable(var, syntax_only, &name TSRMLS_CC); + retval = zend_is_callable_ex(var, NULL, check_flags, &name, NULL, NULL, &error TSRMLS_CC); zval_dtor(*callable_name); ZVAL_STRING(*callable_name, name, 0); } else { - retval = zend_is_callable(var, syntax_only, NULL TSRMLS_CC); + retval = zend_is_callable_ex(var, NULL, check_flags, NULL, NULL, NULL, &error TSRMLS_CC); + } + if (error) { + /* ignore errors */ + efree(error); } RETURN_BOOL(retval); |