summaryrefslogtreecommitdiff
path: root/ext/standard/type.c
diff options
context:
space:
mode:
authorDmitry Stogov <dmitry@php.net>2009-04-02 09:56:33 +0000
committerDmitry Stogov <dmitry@php.net>2009-04-02 09:56:33 +0000
commit875a27b7ede3d5b4e0a274017962f788d9176542 (patch)
treedb1bebc213e33c433526607efddc3efa2a8f656e /ext/standard/type.c
parentf18b366ec83675991754172d438833b8b5d9957a (diff)
downloadphp-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.c16
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);