From: George Peter Banyard Date: Wed, 8 Jul 2020 16:44:34 +0000 (+0200) Subject: Use ZPP callable check for ldap_set_rebind_proc() X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=96c7d42a3ca9d822a08b3dd48060abca8240413a;p=php Use ZPP callable check for ldap_set_rebind_proc() --- diff --git a/ext/ldap/ldap.c b/ext/ldap/ldap.c index cb0ab4f02c..c095749b6c 100644 --- a/ext/ldap/ldap.c +++ b/ext/ldap/ldap.c @@ -3710,10 +3710,12 @@ int _ldap_rebind_proc(LDAP *ldap, const char *url, ber_tag_t req, ber_int_t msgi /* {{{ Set a callback function to do re-binds on referral chasing. */ PHP_FUNCTION(ldap_set_rebind_proc) { - zval *link, *callback; + zval *link; + zend_fcall_info fci; + zend_fcall_info_cache fcc; ldap_linkdata *ld; - if (zend_parse_parameters(ZEND_NUM_ARGS(), "rz", &link, &callback) != SUCCESS) { + if (zend_parse_parameters(ZEND_NUM_ARGS(), "rf!", &link, &fci, &fcc) == FAILURE) { RETURN_THROWS(); } @@ -3721,7 +3723,7 @@ PHP_FUNCTION(ldap_set_rebind_proc) RETURN_THROWS(); } - if (Z_TYPE_P(callback) == IS_NULL) { + if (!ZEND_FCI_INITIALIZED(fci)) { /* unregister rebind procedure */ if (!Z_ISUNDEF(ld->rebindproc)) { zval_ptr_dtor(&ld->rebindproc); @@ -3731,12 +3733,6 @@ PHP_FUNCTION(ldap_set_rebind_proc) RETURN_TRUE; } - /* callable? */ - if (!zend_is_callable(callback, 0, NULL)) { - zend_argument_type_error(2, "must be a valid callback or null, %s given", zend_zval_type_name(callback)); - RETURN_THROWS(); - } - /* register rebind procedure */ if (Z_ISUNDEF(ld->rebindproc)) { ldap_set_rebind_proc(ld->link, _ldap_rebind_proc, (void *) link); @@ -3744,7 +3740,7 @@ PHP_FUNCTION(ldap_set_rebind_proc) zval_ptr_dtor(&ld->rebindproc); } - ZVAL_COPY(&ld->rebindproc, callback); + ZVAL_COPY(&ld->rebindproc, &fci.function_name); RETURN_TRUE; } /* }}} */ diff --git a/ext/ldap/tests/ldap_set_rebind_proc_error.phpt b/ext/ldap/tests/ldap_set_rebind_proc_error.phpt index c12989b15f..9027a4628f 100644 --- a/ext/ldap/tests/ldap_set_rebind_proc_error.phpt +++ b/ext/ldap/tests/ldap_set_rebind_proc_error.phpt @@ -39,5 +39,5 @@ try { echo $error->getMessage(), "\n"; } ?> ---EXPECTF-- -ldap_set_rebind_proc(): Argument #2 ($callback) must be a valid callback or null, string given +--EXPECT-- +ldap_set_rebind_proc(): Argument #2 ($callback) must be a valid callback or null, function "rebind_proc_inexistent" not found or invalid function name