Bug #79013 [PATCH]: Content-Length missing when posting a curlFile with curl

From: Date: Fri, 28 Feb 2020 10:12:55 +0000
Subject: Bug #79013 [PATCH]: Content-Length missing when posting a curlFile with curl
References: 1  Groups: php.bugs 
Request: Send a blank email to php-bugs+get-225772@lists.php.net to get a copy of this message
Edit report at https://bugs.php.net/bug.php?id=79013&edit=1

 ID:                 79013
 Patch added by:     cmb@php.net
 Reported by:        christian at klemmer dot io
 Summary:            Content-Length missing when posting a curlFile with
                     curl
 Status:             Re-Opened
 Type:               Bug
 Package:            cURL related
 Operating System:   debian 10.2
 PHP Version:        7.4.1
 Assigned To:        cmb
 Block user comment: N
 Private report:     N

 New Comment:

The following pull request has been associated:

Patch Name: Fix #79013: Content-Length missing when posting a curlFile with curl
On GitHub:  https://github.com/php/php-src/pull/5219
Patch:      https://github.com/php/php-src/pull/5219.patch


Previous Comments:
------------------------------------------------------------------------
[2020-02-20 12:41:43] cmb@php.net

Related To: Bug #79289

------------------------------------------------------------------------
[2020-02-13 18:53:38] andrewscaya at yahoo dot ca

I can confirm that when PHP 7.4 reverts to using chunked file uploads, PHP scripts that were working
fine on PHP 7.2 or 7.3, no longer post anything to the server.

EXAMPLE SCRIPT
--------------

/* http://example.com:
<?php var_dump($_FILES); ?>
*/

// Create a cURL handle
$ch = curl_init('http://example.com/index.php');

$cfile = curl_file_create('example.txt','text/plain','test_name');

// Assign POST data
$postdata = ['file' => $cfile];
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $postdata);

// Execute the handle
echo curl_exec($ch);

ACTUAL RESULTS
--------------

Using cURL 7.68.0 and PHP 7.3
-----------------------------

$_FILES:
/srv/www/index.php:5:
array (size=1)
  'file' =>
    array (size=5)
      'name' => 'test_name' (length=9)
      'type' => 'text/plain' (length=10)
      'tmp_name' => '/tmp/php69gfI5' (length=14)
      'error' => 0
      'size' => 25

POST /index.php HTTP/1.1
Content-Type: multipart/form-data; boundary=------------------------63a96cbe43cf28f8
Content-Length: 212
Accept: */*
Host: example.com

Using cURL 7.68.0 and PHP 7.4
-----------------------------

$_FILES:
/srv/www/index.php:5:
array (size=0)
  empty

POST /index.php HTTP/1.1
Expect: 100-continue
Content-Type: multipart/form-data; boundary=------------------------46680d0956db253f
Transfer-Encoding: chunked
Accept: */*
Host: example.com

EXPECTED RESULTS
----------------

Should be the same.

------------------------------------------------------------------------
[2020-01-24 13:11:41] cmb@php.net

For me, using current PHP-7.4 the test script outputs:

Linux, curl 7.64.0:

    POST / HTTP/2
    Host: example.com
    Accept: */*
    Transfer-Encoding: chunked
    Content-Type: multipart/form-data; boundary=------------------------df0efab1e65ad7e7

Linux, curl 7.68.0:

    POST / HTTP/2
    Host: example.com
    accept: */*
    content-type: multipart/form-data; boundary=------------------------f55b79edfe19cb82

Windows, curl 7.67.0

    POST / HTTP/2
    Host: example.com
    accept: */*
    content-type: multipart/form-data; boundary=------------------------1e758282c5b98dfb

So obviously a bug in libcurl which has been fixed in the meantime.

------------------------------------------------------------------------
[2020-01-23 18:05:45] sdmarshall73 at gmail dot com

My apologies for the previous post ( and this one ). You did mention the files were being removed on
the remote side. Seems like the same issue I'm experiencing. I've voted on the bug and
I'll just follow this post. Please remove these comments if possible.

------------------------------------------------------------------------
[2020-01-23 17:10:05] sdmarshall73 at gmail dot com

Have you actually tested to see if the files are being received on the remote server? I have an
application that uploads files and the files aren't being received on the remote server when
using PHP7.4. I wanted to see if this bug is related before filing my own bug report.

------------------------------------------------------------------------


The remainder of the comments for this report are too long. To view
the rest of the comments, please view the bug report online at

    https://bugs.php.net/bug.php?id=79013


--
Edit this bug report at https://bugs.php.net/bug.php?id=79013&edit=1


Thread (22 messages)

« previous php.bugs (#225772) next »