From: Christoph M. Becker Date: Thu, 19 Sep 2019 07:17:53 +0000 (+0200) Subject: Merge branch 'PHP-7.4' X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=d6ef63db53383ad8ad1b61fb5283e836a1688a4c;p=php Merge branch 'PHP-7.4' * PHP-7.4: Fix #78543: is_callable() on FFI\CData throws Exception --- d6ef63db53383ad8ad1b61fb5283e836a1688a4c diff --cc Zend/zend_API.c index 1ace606a7e,5be9d94dee..ad61ad6624 --- a/Zend/zend_API.c +++ b/Zend/zend_API.c @@@ -3230,12 -3411,17 +3230,18 @@@ check_func } return 0; case IS_OBJECT: - if (Z_OBJ_HANDLER_P(callable, get_closure) && Z_OBJ_HANDLER_P(callable, get_closure)(Z_OBJ_P(callable), &fcc->calling_scope, &fcc->function_handler, &fcc->object) == SUCCESS) { + if (Z_OBJ_HANDLER_P(callable, get_closure)) { - if (Z_OBJ_HANDLER_P(callable, get_closure)(callable, &fcc->calling_scope, &fcc->function_handler, &fcc->object) == SUCCESS) { - fcc->called_scope = fcc->calling_scope; - if (fcc == &fcc_local) { - zend_release_fcall_info_cache(fcc); - } - return 1; ++ if (Z_OBJ_HANDLER_P(callable, get_closure)(Z_OBJ_P(callable), &fcc->calling_scope, &fcc->function_handler, &fcc->object) == SUCCESS) { + fcc->called_scope = fcc->calling_scope; + if (fcc == &fcc_local) { + zend_release_fcall_info_cache(fcc); + } + return 1; + } else { - /* Discard exceptions thrown from Z_OBJ_HANDLER_P(callable, get_closure) */ ++ /* Discard exceptions thrown from Z_OBJ_HANDLER_P(callable, get_closure) ++ TODO: extend get_closure() with additional argument and prevent exception throwing in the first place */ + zend_clear_exception(); - } ++ } } if (error) *error = estrdup("no array or string given"); return 0;