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

 ID:                 60826
 Comment by:         andres at fenestrae dot com
 Reported by:        clarkwise at gmail dot com
 Summary:            raw POST data missing with chunked encoding, FastCGI
 Status:             Assigned
 Type:               Bug
 Package:            CGI/CLI related
 Operating System:   Windows XP
 PHP Version:        5.3.9
 Assigned To:        ab
 Block user comment: N
 Private report:     N

 New Comment:

The problem lies in php-cgi.exe.
I have been able to reproduce the problem on IIS 7.5.
In Fast-cgi the data is delivered using method similar to chunking.

In case of "Transfer-Encoding: chunked" IIS supplies Content-length:-1 in the 
request data, which is casted to uint in sapi_cgi_read_post. Causing the 
routine to read data until it has read the full 4G (2^32-1).
Also, both the methods sapi_cgi_read_post(cgi_main.c) and fcgi_read(fastcgi.c) 
try to read the complete buffer time after time, causing the end-marker 
(0-sized chunk) only to be seen when it would be at buffer-boundary. However 
the sapi_cgi_read_post funtion is called several times after the actual content 
has been read causing the fcgi_read method to block.
I expect similar cause to apply for apache.

Solution appears
1) do not loop in fcgi_read; this way when reading the final marker, it is 
returned to the calling code.
2) Set SG(request_info).content_length to SG(read_post_bytes) + read_bytes when 
tmp_read_bytes ==0 && SG(request_info).content_length == -1


Previous Comments:
------------------------------------------------------------------------
[2012-04-03 13:02:34] florian dot fernandez at navaho dot fr

@ab at php dot net

Unfortunately, I won't be able to test with nginx because the system 
administrators won't let me install it (Only Apache is allowed). Sorry for the 
inconvenience. I'll try to open a new bug on Apache bug list or mod_fcigd bug 
list if I find it : maybe they'll look into it.

------------------------------------------------------------------------
[2012-03-27 20:26:14] clarkwise at gmail dot com

I finally got my hands on Windows Server 2008 running IIS 7.0.
Same problem; when POST request is chunked, the response times out.

Perhaps I'm missing a setting that would enable the receipt of 
chunked incoming requests, but I have only read about settings
that chunk the outgoing response.

------------------------------------------------------------------------
[2012-03-27 13:34:28] a...@php.net

@florian dot fernandez at navaho dot fr

Looks like that. Could you try nginx+chunkin to confirm please?

------------------------------------------------------------------------
[2012-03-27 08:52:31] florian dot fernandez at navaho dot fr

So, it is not a PHP problem ?

------------------------------------------------------------------------
[2012-03-23 15:27:44] clarkwise at gmail dot com

Making the chunked request to a stock nginx 1.0.13 installation
on Ubuntu yields a "411 Length Required" message, but enabling
the ngx_chunkin module does indeed correctly serve the request
and populate php://input and $HTTP_RAW_POST_DATA.

This was done with both Ubuntu's distribution of
PHP 5.3.6 and the php5.4-201203221530 snapshot.

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


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=60826


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

Reply via email to