From e4ebe145b4e8cee2d8eeb39a23bb80335c98306d Mon Sep 17 00:00:00 2001 From: divinity76 Date: Mon, 15 Jan 2024 22:11:47 +0100 Subject: [PATCH 1/4] fix missing error check in curl_multi_init() unsure if it should return false (like curl_init()) or throw (like most constructors do on failure) though.. --- ext/curl/multi.c | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/ext/curl/multi.c b/ext/curl/multi.c index 3acd6a4c5b190..3fb2ff809758e 100644 --- a/ext/curl/multi.c +++ b/ext/curl/multi.c @@ -60,12 +60,18 @@ static inline php_curlm *curl_multi_from_obj(zend_object *obj) { PHP_FUNCTION(curl_multi_init) { php_curlm *mh; + CURLM *multi; ZEND_PARSE_PARAMETERS_NONE(); - + multi = curl_multi_init(); + if(multi == NULL) { + // todo: should it throw or return false? (curl_init returns false) + php_error_docref(NULL, E_WARNING, "Could not initialize a new cURL multi handle"); + RETURN_FALSE; + } object_init_ex(return_value, curl_multi_ce); mh = Z_CURL_MULTI_P(return_value); - mh->multi = curl_multi_init(); + mh->multi = multi; zend_llist_init(&mh->easyh, sizeof(zval), _php_curl_multi_cleanup_list, 0); } From 42afc2d2ddb9f414afce3f5fc42ef76fece60511 Mon Sep 17 00:00:00 2001 From: divinity76 Date: Mon, 15 Jan 2024 22:14:39 +0100 Subject: [PATCH 2/4] UNEXPECTED --- ext/curl/multi.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ext/curl/multi.c b/ext/curl/multi.c index 3fb2ff809758e..9777bc438e66e 100644 --- a/ext/curl/multi.c +++ b/ext/curl/multi.c @@ -64,7 +64,7 @@ PHP_FUNCTION(curl_multi_init) ZEND_PARSE_PARAMETERS_NONE(); multi = curl_multi_init(); - if(multi == NULL) { + if(UNEXPECTED(multi == NULL)) { // todo: should it throw or return false? (curl_init returns false) php_error_docref(NULL, E_WARNING, "Could not initialize a new cURL multi handle"); RETURN_FALSE; From 935c4c9a918d38de04b25a2bf005c5e7b0b885b1 Mon Sep 17 00:00:00 2001 From: divinity76 Date: Mon, 15 Jan 2024 22:18:04 +0100 Subject: [PATCH 3/4] throw instead of false --- ext/curl/multi.c | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/ext/curl/multi.c b/ext/curl/multi.c index 9777bc438e66e..6236ed2415461 100644 --- a/ext/curl/multi.c +++ b/ext/curl/multi.c @@ -65,9 +65,8 @@ PHP_FUNCTION(curl_multi_init) ZEND_PARSE_PARAMETERS_NONE(); multi = curl_multi_init(); if(UNEXPECTED(multi == NULL)) { - // todo: should it throw or return false? (curl_init returns false) - php_error_docref(NULL, E_WARNING, "Could not initialize a new cURL multi handle"); - RETURN_FALSE; + zend_throw_error(NULL, "Could not initialize a new cURL multi handle"); + RETURN_THROWS(); } object_init_ex(return_value, curl_multi_ce); mh = Z_CURL_MULTI_P(return_value); From 8b2d9a3294f7283a614ff16b66d96823e78dc3d5 Mon Sep 17 00:00:00 2001 From: divinity76 Date: Mon, 15 Jan 2024 22:48:55 +0100 Subject: [PATCH 4/4] error message nitpick --- ext/curl/multi.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ext/curl/multi.c b/ext/curl/multi.c index 6236ed2415461..73cb37bab3604 100644 --- a/ext/curl/multi.c +++ b/ext/curl/multi.c @@ -64,8 +64,8 @@ PHP_FUNCTION(curl_multi_init) ZEND_PARSE_PARAMETERS_NONE(); multi = curl_multi_init(); - if(UNEXPECTED(multi == NULL)) { - zend_throw_error(NULL, "Could not initialize a new cURL multi handle"); + if (UNEXPECTED(multi == NULL)) { + zend_throw_error(NULL, "%s(): Could not initialize a new cURL multi handle", get_active_function_name()); RETURN_THROWS(); } object_init_ex(return_value, curl_multi_ce);