diff --git a/UPGRADING b/UPGRADING index 6cc0cc537df2d..e59bfe2d64584 100644 --- a/UPGRADING +++ b/UPGRADING @@ -147,6 +147,11 @@ PHP 8.5 UPGRADE NOTES indicating the http and proxy authentication methods that were used in the previous request. See CURLAUTH_* constants for possible values. + . Added CURLOPT_INFILESIZE_LARGE Curl option, which is a safe + replacement for CURLOPT_INFILESIZE_LARGE. On certain systems, + CURLOPT_INFILESIZE only accepts a 32-bit signed integer as the file + size (2.0 GiB) even on 64-bit systems. CURLOPT_INFILESIZE_LARGE + accepts the largest integer size the system can handle. - DOM: . Added Dom\Element::$outerHTML. diff --git a/ext/curl/curl.stub.php b/ext/curl/curl.stub.php index c9abe237339b5..6a73913f8a85e 100644 --- a/ext/curl/curl.stub.php +++ b/ext/curl/curl.stub.php @@ -188,6 +188,11 @@ * @cvalue CURLOPT_INFILESIZE */ const CURLOPT_INFILESIZE = UNKNOWN; +/** + * @var int + * @cvalue CURLOPT_INFILESIZE_LARGE + */ +const CURLOPT_INFILESIZE_LARGE = UNKNOWN; /** * @var int * @cvalue CURLOPT_INTERFACE diff --git a/ext/curl/curl_arginfo.h b/ext/curl/curl_arginfo.h index 6a81d1e92c88f..53a59fe47be49 100644 --- a/ext/curl/curl_arginfo.h +++ b/ext/curl/curl_arginfo.h @@ -1,5 +1,5 @@ /* This is a generated file, edit the .stub.php file instead. - * Stub hash: 48fc95503f4f8cc96575ff6f31fdd1e4cdc5969e */ + * Stub hash: 77da3a34f08b3e932a0545f72b41bf0353e8b157 */ ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_curl_close, 0, 1, IS_VOID, 0) ZEND_ARG_OBJ_INFO(0, handle, CurlHandle, 0) @@ -263,6 +263,7 @@ static void register_curl_symbols(int module_number) REGISTER_LONG_CONSTANT("CURLOPT_HTTP_VERSION", CURLOPT_HTTP_VERSION, CONST_PERSISTENT); REGISTER_LONG_CONSTANT("CURLOPT_INFILE", CURLOPT_INFILE, CONST_PERSISTENT); REGISTER_LONG_CONSTANT("CURLOPT_INFILESIZE", CURLOPT_INFILESIZE, CONST_PERSISTENT); + REGISTER_LONG_CONSTANT("CURLOPT_INFILESIZE_LARGE", CURLOPT_INFILESIZE_LARGE, CONST_PERSISTENT); REGISTER_LONG_CONSTANT("CURLOPT_INTERFACE", CURLOPT_INTERFACE, CONST_PERSISTENT); REGISTER_LONG_CONSTANT("CURLOPT_KRB4LEVEL", CURLOPT_KRB4LEVEL, CONST_PERSISTENT); REGISTER_LONG_CONSTANT("CURLOPT_LOW_SPEED_LIMIT", CURLOPT_LOW_SPEED_LIMIT, CONST_PERSISTENT); diff --git a/ext/curl/interface.c b/ext/curl/interface.c index aebb336378bc0..8458cd77dabd2 100644 --- a/ext/curl/interface.c +++ b/ext/curl/interface.c @@ -2244,6 +2244,7 @@ static zend_result _php_curl_setopt(php_curl *ch, zend_long option, zval *zvalue break; /* Curl off_t options */ + case CURLOPT_INFILESIZE_LARGE: case CURLOPT_MAX_RECV_SPEED_LARGE: case CURLOPT_MAX_SEND_SPEED_LARGE: case CURLOPT_MAXFILESIZE_LARGE: diff --git a/ext/curl/tests/Caddyfile b/ext/curl/tests/Caddyfile index 30686f0bb9fa2..67b82434ba4c6 100644 --- a/ext/curl/tests/Caddyfile +++ b/ext/curl/tests/Caddyfile @@ -12,6 +12,11 @@ respond /serverpush "main response" respond /serverpush/pushed "pushed response" push /serverpush /serverpush/pushed +route /show_upload_size { + templates + respond `Content-length: ={{.Req.Header.Get "Content-length"}}=` +} + basic_auth /http-basic-auth { # bcrypt password hash for "password", calculated with 'caddy hash-password' user $2a$14$yUKl9SGqVTAAqPTzLup.DefsbXXx3kfreNnzpJOUHcIrKnr5lgef2 diff --git a/ext/curl/tests/curl_setopt_CURLOPT_INFILESIZE_LARGE.phpt b/ext/curl/tests/curl_setopt_CURLOPT_INFILESIZE_LARGE.phpt new file mode 100644 index 0000000000000..5063958412b5a --- /dev/null +++ b/ext/curl/tests/curl_setopt_CURLOPT_INFILESIZE_LARGE.phpt @@ -0,0 +1,58 @@ +--TEST-- +Curl option CURLOPT_INFILESIZE_LARGE +--EXTENSIONS-- +curl +--SKIPIF-- + +--FILE-- + true, + CURLOPT_UPLOAD => true, + CURLOPT_INFILE => $f, + CURLOPT_INFILESIZE => filesize(__FILE__), + CURLOPT_CONNECTTIMEOUT => 3, + CURLOPT_TIMEOUT => 3, + CURLOPT_SSL_VERIFYHOST => 0, + CURLOPT_SSL_VERIFYPEER => 0, +])); + +var_dump(curl_exec($ch)); + +var_dump(curl_setopt($ch, CURLOPT_INFILESIZE, -1)); +var_dump(curl_exec($ch)); + +var_dump(curl_setopt($ch, CURLOPT_INFILESIZE_LARGE, -1)); +var_dump(curl_exec($ch)); + +rewind($f); +var_dump(curl_setopt($ch, CURLOPT_INFILESIZE, filesize(__FILE__))); +var_dump(curl_exec($ch)); +var_dump(curl_setopt($ch, CURLOPT_INFILESIZE_LARGE, -1)); +var_dump(curl_exec($ch)); + +rewind($f); +var_dump(curl_setopt($ch, CURLOPT_INFILESIZE_LARGE, filesize(__FILE__))); +var_dump(curl_exec($ch)); + +var_dump(curl_error($ch)); + +?> +--EXPECTF-- +bool(true) +string(21) "Content-length: =%d=" +bool(true) +string(18) "Content-length: ==" +bool(true) +string(18) "Content-length: ==" +bool(true) +string(21) "Content-length: =%d=" +bool(true) +string(18) "Content-length: ==" +bool(true) +string(21) "Content-length: =%d=" +string(0) ""