diff --git a/ext/curl/interface.c b/ext/curl/interface.c index db249eee057bc..3a4016c2174f7 100644 --- a/ext/curl/interface.c +++ b/ext/curl/interface.c @@ -652,6 +652,9 @@ static int curl_progress(void *clientp, double dltotal, double dlnow, double ult fprintf(stderr, "curl_progress() called\n"); fprintf(stderr, "clientp = %x, dltotal = %f, dlnow = %f, ultotal = %f, ulnow = %f\n", clientp, dltotal, dlnow, ultotal, ulnow); #endif + if (!ZEND_FCC_INITIALIZED(ch->handlers.progress)) { + return rval; + } zval args[5]; zval retval; @@ -690,6 +693,9 @@ static int curl_xferinfo(void *clientp, curl_off_t dltotal, curl_off_t dlnow, cu fprintf(stderr, "curl_xferinfo() called\n"); fprintf(stderr, "clientp = %x, dltotal = %ld, dlnow = %ld, ultotal = %ld, ulnow = %ld\n", clientp, dltotal, dlnow, ultotal, ulnow); #endif + if (!ZEND_FCC_INITIALIZED(ch->handlers.xferinfo)) { + return rval; + } zval argv[5]; zval retval; diff --git a/ext/curl/tests/gh21023.phpt b/ext/curl/tests/gh21023.phpt new file mode 100644 index 0000000000000..9b9e314809c46 --- /dev/null +++ b/ext/curl/tests/gh21023.phpt @@ -0,0 +1,25 @@ +--TEST-- +GH-21023 (crash with CURLOPT_XFERINFOFUNCTION set with an invalid callback) +--EXTENSIONS-- +curl +--INI-- +error_reporting = E_ALL & ~E_DEPRECATED +--FILE-- + +--EXPECTF-- +Warning: Undefined variable $callback in %s on line %d + +Warning: Undefined variable $callback in %s on line %d