diff options
author | Christoph M. Becker <cmbecker69@gmx.de> | 2021-01-18 11:01:01 +0100 |
---|---|---|
committer | Christoph M. Becker <cmbecker69@gmx.de> | 2021-01-18 11:01:01 +0100 |
commit | c321896a372c3358663f2f1e8721c61c46634a0c (patch) | |
tree | f0fcd076accc43c54d6b049cb33bba6bb5f7b42b | |
parent | 880bf6222415f5bb87a73bc830bfa98ef30c267a (diff) | |
parent | 38ad37ad435511391e16983794022a8d1e7d6a14 (diff) | |
download | php-git-c321896a372c3358663f2f1e8721c61c46634a0c.tar.gz |
Merge branch 'PHP-7.4' into PHP-8.0
* PHP-7.4:
Fix #80595: Resetting POSTFIELDS to empty array breaks request
-rw-r--r-- | NEWS | 3 | ||||
-rw-r--r-- | ext/curl/interface.c | 9 | ||||
-rw-r--r-- | ext/curl/tests/bug79033.phpt | 1 | ||||
-rw-r--r-- | ext/curl/tests/bug80595.phpt | 30 |
4 files changed, 42 insertions, 1 deletions
@@ -15,6 +15,9 @@ PHP NEWS . Fixed bug #80545 (bcadd('a', 'a') doesn't throw an exception). (Jens de Nies) +- Curl: + . Fixed bug #80595 (Resetting POSTFIELDS to empty array breaks request). (cmb) + - Date: . Fixed bug #80376 (last day of the month causes runway cpu usage). (Derick) diff --git a/ext/curl/interface.c b/ext/curl/interface.c index f01f6f775a..82d97053ee 100644 --- a/ext/curl/interface.c +++ b/ext/curl/interface.c @@ -2722,7 +2722,14 @@ static int _php_curl_setopt(php_curl *ch, zend_long option, zval *zvalue, bool i case CURLOPT_POSTFIELDS: if (Z_TYPE_P(zvalue) == IS_ARRAY) { - return build_mime_structure_from_hash(ch, zvalue); + if (zend_hash_num_elements(HASH_OF(zvalue)) == 0) { + /* no need to build the mime structure for empty hashtables; + also works around https://github.com/curl/curl/issues/6455 */ + curl_easy_setopt(ch->cp, CURLOPT_POSTFIELDS, ""); + error = curl_easy_setopt(ch->cp, CURLOPT_POSTFIELDSIZE, 0); + } else { + return build_mime_structure_from_hash(ch, zvalue); + } } else { zend_string *tmp_str; zend_string *str = zval_get_tmp_string(zvalue, &tmp_str); diff --git a/ext/curl/tests/bug79033.phpt b/ext/curl/tests/bug79033.phpt index c70611dda6..1ba75ad0e6 100644 --- a/ext/curl/tests/bug79033.phpt +++ b/ext/curl/tests/bug79033.phpt @@ -25,5 +25,6 @@ string(%d) "POST /get.inc?test=post HTTP/1.1 Host: localhost:%d Accept: */* Content-Length: 0 +Content-Type: application/x-www-form-urlencoded " diff --git a/ext/curl/tests/bug80595.phpt b/ext/curl/tests/bug80595.phpt new file mode 100644 index 0000000000..48137db4e6 --- /dev/null +++ b/ext/curl/tests/bug80595.phpt @@ -0,0 +1,30 @@ +--TEST-- +Bug #80595 (Resetting POSTFIELDS to empty array breaks request) +--SKIPIF-- +<?php include 'skipif.inc'; ?> +--FILE-- +<?php +include 'server.inc'; +$host = curl_cli_server_start(); +$ch = curl_init(); +curl_setopt_array($ch, [ + CURLOPT_RETURNTRANSFER => true, + CURLOPT_POST => true, + CURLOPT_URL => "{$host}/get.inc?test=post", +]); + +curl_setopt($ch, CURLOPT_POSTFIELDS, ['foo' => 'bar']); +var_dump(curl_exec($ch)); + +curl_setopt($ch, CURLOPT_POSTFIELDS, []); +var_dump(curl_exec($ch)); +?> +--EXPECT-- +string(43) "array(1) { + ["foo"]=> + string(3) "bar" +} +" +string(13) "array(0) { +} +" |