Newsgroups: php.internals Path: news.php.net Xref: news.php.net php.internals:44979 Return-Path: Mailing-List: contact internals-help@lists.php.net; run by ezmlm Delivered-To: mailing list internals@lists.php.net Received: (qmail 1438 invoked from network); 15 Jul 2009 17:49:23 -0000 Received: from unknown (HELO lists.php.net) (127.0.0.1) by localhost with SMTP; 15 Jul 2009 17:49:23 -0000 Authentication-Results: pb1.pair.com header.from=david.zuelke@bitextender.com; sender-id=unknown Authentication-Results: pb1.pair.com smtp.mail=david.zuelke@bitextender.com; spf=permerror; sender-id=unknown Received-SPF: error (pb1.pair.com: domain bitextender.com from 80.237.132.12 cause and error) X-PHP-List-Original-Sender: david.zuelke@bitextender.com X-Host-Fingerprint: 80.237.132.12 wp005.webpack.hosteurope.de Received: from [80.237.132.12] ([80.237.132.12:51925] helo=wp005.webpack.hosteurope.de) by pb1.pair.com (ecelerity 2.1.1.9-wez r(12769M)) with ESMTP id 00/B3-18024-1A61E5A4 for ; Wed, 15 Jul 2009 13:49:22 -0400 Received: from ip-77-25-107-123.web.vodafone.de ([77.25.107.123]); authenticated by wp005.webpack.hosteurope.de running ExIM with esmtpsa (TLSv1:RC4-SHA:128) id 1MR8bP-0008Bd-Ch; Wed, 15 Jul 2009 19:49:18 +0200 Message-ID: To: PHP Internals Content-Type: multipart/mixed; boundary=Apple-Mail-4-937485960 Mime-Version: 1.0 (Apple Message framework v935.3) Date: Wed, 15 Jul 2009 19:49:01 +0200 Cc: Tjerk Anne Meesters , Arnaud Le Blanc , Jani Taskinen X-Mailer: Apple Mail (2.935.3) X-bounce-key: webpack.hosteurope.de;david.zuelke@bitextender.com;1247680161;aedce47d; Subject: Patch for Bug # From: david.zuelke@bitextender.com (=?ISO-8859-1?Q?David_Z=FClke?=) --Apple-Mail-4-937485960 Content-Type: text/plain; charset=US-ASCII; format=flowed; delsp=yes Content-Transfer-Encoding: 7bit Hi there, attached are patches for http://bugs.php.net/48929. Big kudos to Tjerk Anne and Arnaud, this forking HTTP server stuff for testing the stream wrapper is genius. - David --Apple-Mail-4-937485960 Content-Disposition: attachment; filename=bug48929-trunk.txt Content-Type: text/plain; x-unix-mode=0644; name="bug48929-trunk.txt" Content-Transfer-Encoding: 7bit Index: ext/standard/tests/http/bug48929.phpt =================================================================== --- ext/standard/tests/http/bug48929.phpt (Revision 0) +++ ext/standard/tests/http/bug48929.phpt (Revision 0) @@ -0,0 +1,56 @@ +--TEST-- +Bug #: duplicate \r\n sent after last header line +--SKIPIF-- + +--FILE-- + $context_options)); + + $responses = array( + "data://text/plain,HTTP/1.0 200 OK\r\n\r\n", + ); + + $pid = http_server("tcp://127.0.0.1:12342", $responses, $output); + + foreach($responses as $r) { + + $fd = fopen('http://127.0.0.1:12342/', 'rb', false, $context); + + fseek($output, 0, SEEK_SET); + var_dump(stream_get_contents($output)); + fseek($output, 0, SEEK_SET); + } + + http_server_kill($pid); +} + +echo "-- Test: requests with 'header' as array --\n"; + +do_test(array('header' => array('X-Foo: bar', 'Content-Type: text/plain'), 'method' => 'POST', 'content' => 'ohai')); + +echo "-- Test: requests with 'header' as string --\n"; + +do_test(array('header' => "X-Foo: bar\r\nContent-Type: text/plain", 'method' => 'POST', 'content' => 'ohai')); + +?> +--EXPECT-- +-- Test: requests with 'header' as array -- +string(103) "POST / HTTP/1.0 +Host: 127.0.0.1:12342 +Content-Length: 4 +X-Foo: bar +Content-Type: text/plain + +ohai" +-- Test: requests with 'header' as string -- +string(103) "POST / HTTP/1.0 +Host: 127.0.0.1:12342 +Content-Length: 4 +X-Foo: bar +Content-Type: text/plain + +ohai" Index: ext/standard/http_fopen_wrapper.c =================================================================== --- ext/standard/http_fopen_wrapper.c (Revision 283975) +++ ext/standard/http_fopen_wrapper.c (Arbeitskopie) @@ -391,7 +391,8 @@ } } smart_str_0(&tmpstr); - tmp = tmpstr.c; + /* Remove newlines and spaces from start and end. there's at least one extra \r\n at the end that needs to go. */ + tmp = php_trim(tmpstr.c, strlen(tmpstr.c), NULL, 0, NULL, 3 TSRMLS_CC); } if (Z_TYPE_PP(tmpzval) == IS_STRING && Z_STRLEN_PP(tmpzval)) { /* Remove newlines and spaces from start and end php_trim will estrndup() */ --Apple-Mail-4-937485960 Content-Disposition: attachment; filename=bug48929-PHP_5_2.txt Content-Type: text/plain; x-unix-mode=0644; name="bug48929-PHP_5_2.txt" Content-Transfer-Encoding: 7bit Index: ext/standard/tests/http/bug48929.phpt =================================================================== --- ext/standard/tests/http/bug48929.phpt (Revision 0) +++ ext/standard/tests/http/bug48929.phpt (Revision 0) @@ -0,0 +1,56 @@ +--TEST-- +Bug #: duplicate \r\n sent after last header line +--SKIPIF-- + +--FILE-- + $context_options)); + + $responses = array( + "data://text/plain,HTTP/1.0 200 OK\r\n\r\n", + ); + + $pid = http_server("tcp://127.0.0.1:12342", $responses, $output); + + foreach($responses as $r) { + + $fd = fopen('http://127.0.0.1:12342/', 'rb', false, $context); + + fseek($output, 0, SEEK_SET); + var_dump(stream_get_contents($output)); + fseek($output, 0, SEEK_SET); + } + + http_server_kill($pid); +} + +echo "-- Test: requests with 'header' as array --\n"; + +do_test(array('header' => array('X-Foo: bar', 'Content-Type: text/plain'), 'method' => 'POST', 'content' => 'ohai')); + +echo "-- Test: requests with 'header' as string --\n"; + +do_test(array('header' => "X-Foo: bar\r\nContent-Type: text/plain", 'method' => 'POST', 'content' => 'ohai')); + +?> +--EXPECT-- +-- Test: requests with 'header' as array -- +string(103) "POST / HTTP/1.0 +Host: 127.0.0.1:12342 +Content-Length: 4 +X-Foo: bar +Content-Type: text/plain + +ohai" +-- Test: requests with 'header' as string -- +string(103) "POST / HTTP/1.0 +Host: 127.0.0.1:12342 +Content-Length: 4 +X-Foo: bar +Content-Type: text/plain + +ohai" Index: ext/standard/http_fopen_wrapper.c =================================================================== --- ext/standard/http_fopen_wrapper.c (Revision 283973) +++ ext/standard/http_fopen_wrapper.c (Arbeitskopie) @@ -347,7 +347,8 @@ } } smart_str_0(&tmpstr); - tmp = tmpstr.c; + /* Remove newlines and spaces from start and end. there's at least one extra \r\n at the end that needs to go. */ + tmp = php_trim(tmpstr.c, strlen(tmpstr.c), NULL, 0, NULL, 3 TSRMLS_CC); } if (Z_TYPE_PP(tmpzval) == IS_STRING && Z_STRLEN_PP(tmpzval)) { /* Remove newlines and spaces from start and end php_trim will estrndup() */ --Apple-Mail-4-937485960 Content-Disposition: attachment; filename=bug48929-PHP_5_3.txt Content-Type: text/plain; x-unix-mode=0644; name="bug48929-PHP_5_3.txt" Content-Transfer-Encoding: 7bit Index: ext/standard/tests/http/bug48929.phpt =================================================================== --- ext/standard/tests/http/bug48929.phpt (Revision 0) +++ ext/standard/tests/http/bug48929.phpt (Revision 0) @@ -0,0 +1,56 @@ +--TEST-- +Bug #: duplicate \r\n sent after last header line +--SKIPIF-- + +--FILE-- + $context_options)); + + $responses = array( + "data://text/plain,HTTP/1.0 200 OK\r\n\r\n", + ); + + $pid = http_server("tcp://127.0.0.1:12342", $responses, $output); + + foreach($responses as $r) { + + $fd = fopen('http://127.0.0.1:12342/', 'rb', false, $context); + + fseek($output, 0, SEEK_SET); + var_dump(stream_get_contents($output)); + fseek($output, 0, SEEK_SET); + } + + http_server_kill($pid); +} + +echo "-- Test: requests with 'header' as array --\n"; + +do_test(array('header' => array('X-Foo: bar', 'Content-Type: text/plain'), 'method' => 'POST', 'content' => 'ohai')); + +echo "-- Test: requests with 'header' as string --\n"; + +do_test(array('header' => "X-Foo: bar\r\nContent-Type: text/plain", 'method' => 'POST', 'content' => 'ohai')); + +?> +--EXPECT-- +-- Test: requests with 'header' as array -- +string(103) "POST / HTTP/1.0 +Host: 127.0.0.1:12342 +Content-Length: 4 +X-Foo: bar +Content-Type: text/plain + +ohai" +-- Test: requests with 'header' as string -- +string(103) "POST / HTTP/1.0 +Host: 127.0.0.1:12342 +Content-Length: 4 +X-Foo: bar +Content-Type: text/plain + +ohai" Index: ext/standard/http_fopen_wrapper.c =================================================================== --- ext/standard/http_fopen_wrapper.c (Revision 283973) +++ ext/standard/http_fopen_wrapper.c (Arbeitskopie) @@ -348,7 +348,8 @@ } } smart_str_0(&tmpstr); - tmp = tmpstr.c; + /* Remove newlines and spaces from start and end. there's at least one extra \r\n at the end that needs to go. */ + tmp = php_trim(tmpstr.c, strlen(tmpstr.c), NULL, 0, NULL, 3 TSRMLS_CC); } if (Z_TYPE_PP(tmpzval) == IS_STRING && Z_STRLEN_PP(tmpzval)) { /* Remove newlines and spaces from start and end php_trim will estrndup() */ --Apple-Mail-4-937485960 Content-Type: text/plain; charset=US-ASCII; format=flowed Content-Transfer-Encoding: 7bit --Apple-Mail-4-937485960--