diff --git a/ext/curl/multi.c b/ext/curl/multi.c index 379f81991e37..3fbfce9b518f 100644 --- a/ext/curl/multi.c +++ b/ext/curl/multi.c @@ -382,6 +382,11 @@ static int _php_server_push_callback(CURL *parent_ch, CURL *easy, size_t num_hea return rval; } + if (UNEXPECTED(zend_fcall_info_init(&t->func_name, 0, &fci, &t->fci_cache, NULL, NULL) == FAILURE)) { + php_error_docref(NULL, E_WARNING, "Cannot call the CURLMOPT_PUSHFUNCTION"); + return CURL_PUSH_OK; + } + parent = Z_CURL_P(pz_parent_ch); ch = init_curl_handle_into_zval(&pz_ch); @@ -395,8 +400,6 @@ static int _php_server_push_callback(CURL *parent_ch, CURL *easy, size_t num_hea add_next_index_string(&headers, header); } - zend_fcall_info_init(&t->func_name, 0, &fci, &t->fci_cache, NULL, NULL); - zend_fcall_info_argn( &fci, 3, pz_parent_ch, diff --git a/ext/curl/tests/curl_pushfunction_nonexistent_callback.phpt b/ext/curl/tests/curl_pushfunction_nonexistent_callback.phpt new file mode 100644 index 000000000000..fe2defa5eea0 --- /dev/null +++ b/ext/curl/tests/curl_pushfunction_nonexistent_callback.phpt @@ -0,0 +1,54 @@ +--TEST-- +Test CURLMOPT_PUSHFUNCTION with non-existent callback function +--CREDITS-- +Davey Shafik +Kévin Dunglas +Niels Dossche +--EXTENSIONS-- +curl +--SKIPIF-- + +--FILE-- + +--EXPECTF-- +Warning: curl_multi_exec(): Cannot call the CURLMOPT_PUSHFUNCTION in %s on line %d