ID:               49851
 Updated by:       srina...@php.net
 Reported By:      sjoerd-php at linuxonly dot nl
-Status:           Verified
+Status:           Feedback
 Bug Type:         HTTP related
 Operating System: Linux 2.6.28 Ubuntu 9.0.4
 PHP Version:      5.3SVN-2009-10-12 (SVN)
 New Comment:

php internally does not have any hard coded limit to parse the header
value. the only time, you will see http header in your output is when
the header does not end with \r\n (to mark it as new line).

as per HTTP spec, every HTTP headers need to end with \r\n (CR LF) to
mark the end of the line. php internally checks for this line to
determine if the header is done before proceeding to parse the body of
the request. 

if you modify this below test case to reflect that there needs to be
\r\n to mark it as end of line, then you will see the expected output. 

<?php
$string = str_pad('X-Padding: ', 1022, 'x').'\r\n';
header($string);
header('Location: http://www.google.nl/');
echo "Foo";
?>

i suggest marking this bug as bogus (or not an issue). 


Previous Comments:
------------------------------------------------------------------------

[2009-10-12 21:16:11] lbarn...@php.net

Verified, since 5.1.0 at least.

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

[2009-10-12 20:24:53] sjo...@php.net

See also bug #49847 "exec() confused by a specially crafted string",
which has a similar cause.

>From http_fopen_wrapper.c:
while (!body && !php_stream_eof(stream)) {
        size_t http_header_line_length;
        if (php_stream_get_line(stream, http_header_line,
HTTP_HEADER_BLOCK_SIZE, &http_header_line_length) && *http_header_line
!= '\n' && *http_header_line != '\r') {
                ...
        } else {
                break;

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

[2009-10-12 20:20:08] sjoerd-php at linuxonly dot nl

Description:
------------
If a HTTP response contains an header of exactly 1024 characters, the
remaining headers are not parsed and are returned in the output.

Reproduce code:
---------------
<?php
echo file_get_contents('http://localhost/a.php');
?>

a.php:
<?php
header(str_pad('X-Padding: ', 1022, 'x'));
header('Location: http://www.google.nl/');
echo "Foo";
?>

Expected result:
----------------
The homepage of google.nl.

Actual result:
--------------
Location: http://www.google.nl
Vary: Accept-Encoding
Content-Length: 3
Connection: close
Content-Type: text/html

Foo


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


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

Reply via email to