From 545276a6209867ac24fe20229e5eef7f1b881c01 Mon Sep 17 00:00:00 2001 From: David Carlier Date: Tue, 27 Aug 2024 05:08:07 +0100 Subject: [PATCH] Follow-up on GH-15548: curl_multi_select. throws a ValueError on timeout overflow. --- ext/curl/multi.c | 7 ++----- ext/curl/tests/gh15547.phpt | 26 +++++++++++++------------- 2 files changed, 15 insertions(+), 18 deletions(-) diff --git a/ext/curl/multi.c b/ext/curl/multi.c index a586571f7bf3f..275de581ae106 100644 --- a/ext/curl/multi.c +++ b/ext/curl/multi.c @@ -188,11 +188,8 @@ PHP_FUNCTION(curl_multi_select) mh = Z_CURL_MULTI_P(z_mh); if (!(timeout >= 0.0 && timeout <= ((double)INT_MAX / 1000.0))) { - php_error_docref(NULL, E_WARNING, "timeout must be between 0 and %d", (int)ceilf((double)INT_MAX / 1000)); -#ifdef CURLM_BAD_FUNCTION_ARGUMENT - SAVE_CURLM_ERROR(mh, CURLM_BAD_FUNCTION_ARGUMENT); -#endif - RETURN_LONG(-1); + zend_argument_value_error(2, "must be between 0 and %d", (int)ceilf((double)INT_MAX / 1000)); + RETURN_THROWS(); } error = curl_multi_wait(mh->multi, NULL, 0, (int) (timeout * 1000.0), &numfds); diff --git a/ext/curl/tests/gh15547.phpt b/ext/curl/tests/gh15547.phpt index bbb1d5c5b0365..cee3f00cdb9f8 100644 --- a/ext/curl/tests/gh15547.phpt +++ b/ext/curl/tests/gh15547.phpt @@ -6,24 +6,24 @@ curl getMessage() . PHP_EOL; +} curl_multi_close($mh); $mh = curl_multi_init(); -var_dump(curl_multi_select($mh, 2500000)); -var_dump(curl_multi_strerror(curl_multi_errno($mh))); +try { + curl_multi_select($mh, 2500000); +} catch (\ValueError $e) { + echo $e->getMessage() . PHP_EOL; +} curl_multi_close($mh); $mh = curl_multi_init(); var_dump(curl_multi_select($mh, 1000000)); -var_dump(curl_multi_strerror(curl_multi_errno($mh))); ?> --EXPECTF-- -Warning: curl_multi_select(): timeout must be between 0 and %d in %s on line %d -int(-1) -%s - -Warning: curl_multi_select(): timeout must be between 0 and %d in %s on line %d -int(-1) -%s +curl_multi_select(): Argument #2 ($timeout) must be between %d and %d +curl_multi_select(): Argument #2 ($timeout) must be between %d and %d int(0) -string(8) "No error"