Thank you to anyone who has already donated - your generous donations helped make three months of treatment possible.
My brother Nate continues to fight stage IV Hodgkin's lymphoma. He's just 31, with a wife and baby girl. They have no active income (since he's been unable to return to work), no insurance, and cannot afford the treatment he needs. Nate and his family need your help. Please consider a donation, every dollar helps. Thanks.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 |
+--TEST-- +Bug #: duplicate \r\n sent after last header line +--SKIPIF-- +<?php require 'server.inc'; http_server_skipif('tcp://127.0.0.1:12342'); ?> +--FILE-- +<?php +require 'server.inc'; + +function do_test($context_options) { + + $context = stream_context_create(array('http' => $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" } } 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() */ |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 |
+--TEST-- +Bug #: duplicate \r\n sent after last header line +--SKIPIF-- +<?php require 'server.inc'; http_server_skipif('tcp://127.0.0.1:12342'); ?> +--FILE-- +<?php +require 'server.inc'; + +function do_test($context_options) { + + $context = stream_context_create(array('http' => $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" } } 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() */ |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 |
+--TEST-- +Bug #: duplicate \r\n sent after last header line +--SKIPIF-- +<?php require 'server.inc'; http_server_skipif('tcp://127.0.0.1:12342'); ?> +--FILE-- +<?php +require 'server.inc'; + +function do_test($context_options) { + + $context = stream_context_create(array('http' => $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" } } 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() */ |