From: Arnaud Le Blanc Date: Sat, 16 May 2009 20:44:56 +0000 (+0000) Subject: Test for #38802 X-Git-Tag: php-5.4.0alpha1~191^2~3642 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=b6b2d5d10fc222cdbc147537d9d5fd1df11ef9a1;p=php Test for #38802 --- diff --git a/ext/standard/tests/http/bug38802.phpt b/ext/standard/tests/http/bug38802.phpt new file mode 100644 index 0000000000..91fd1cce9d --- /dev/null +++ b/ext/standard/tests/http/bug38802.phpt @@ -0,0 +1,172 @@ +--TEST-- +Bug #38802 (ignore_errors and max_redirects) +--SKIPIF-- + +--FILE-- + $context_options)); + + $responses = array( + "data://text/plain,HTTP/1.0 302 Moved Temporarily\r\nLocation: http://127.0.0.1:12342/foo/bar2\r\n\r\n1", + "data://text/plain,HTTP/1.0 301 Moved Permanently\r\nLocation: http://127.0.0.1:12342/foo/bar3\r\n\r\n", + "data://text/plain,HTTP/1.0 302 Moved Temporarily\r\nLocation: http://127.0.0.1:12342/foo/bar4\r\n\r\n3", + "data://text/plain,HTTP/1.0 200 OK\r\n\r\ndone.", + ); + + $pid = http_server("tcp://127.0.0.1:12342", $responses, $output); + + $fd = fopen('http://127.0.0.1:12342/foo/bar', 'rb', false, $context); + var_dump($fd); + + if ($fd) { + $meta_data = stream_get_meta_data($fd); + var_dump($meta_data['wrapper_data']); + + var_dump(stream_get_contents($fd)); + } + + fseek($output, 0, SEEK_SET); + var_dump(stream_get_contents($output)); + + http_server_kill($pid); +} + +echo "-- Test: follow all redirections --\n"; + +do_test(array(), 4); + +echo "-- Test: fail after 2 redirections --\n"; + +do_test(array('max_redirects' => 2), 2); + +echo "-- Test: fail at first redirection --\n"; + +do_test(array('max_redirects' => 0), 1); + +echo "-- Test: fail at first redirection (2) --\n"; + +do_test(array('max_redirects' => 1), 1); + +echo "-- Test: return at first redirection --\n"; + +do_test(array('max_redirects' => 0, 'ignore_errors' => 1), 1); + +echo "-- Test: return at first redirection (2) --\n"; + +do_test(array('max_redirects' => 1, 'ignore_errors' => 1), 1); + +echo "-- Test: return at second redirection --\n"; + +do_test(array('max_redirects' => 2, 'ignore_errors' => 1), 2); + +?> +--EXPECTF-- +-- Test: follow all redirections -- +resource(%d) of type (stream) +array(7) { + [0]=> + string(30) "HTTP/1.0 302 Moved Temporarily" + [1]=> + string(41) "Location: http://127.0.0.1:12342/foo/bar2" + [2]=> + string(30) "HTTP/1.0 301 Moved Permanently" + [3]=> + string(41) "Location: http://127.0.0.1:12342/foo/bar3" + [4]=> + string(30) "HTTP/1.0 302 Moved Temporarily" + [5]=> + string(41) "Location: http://127.0.0.1:12342/foo/bar4" + [6]=> + string(15) "HTTP/1.0 200 OK" +} +string(5) "done." +string(195) "GET /foo/bar HTTP/1.0 +Host: 127.0.0.1:12342 + +GET /foo/bar2 HTTP/1.0 +Host: 127.0.0.1:12342 + +GET /foo/bar3 HTTP/1.0 +Host: 127.0.0.1:12342 + +GET /foo/bar4 HTTP/1.0 +Host: 127.0.0.1:12342 + +" +-- Test: fail after 2 redirections -- + +Warning: fopen(http://127.0.0.1:12342/foo/bar): failed to open stream: Redirection limit reached, aborting in %s +bool(false) +string(97) "GET /foo/bar HTTP/1.0 +Host: 127.0.0.1:12342 + +GET /foo/bar2 HTTP/1.0 +Host: 127.0.0.1:12342 + +" +-- Test: fail at first redirection -- + +Warning: fopen(http://127.0.0.1:12342/foo/bar): failed to open stream: Redirection limit reached, aborting in %s +bool(false) +string(48) "GET /foo/bar HTTP/1.0 +Host: 127.0.0.1:12342 + +" +-- Test: fail at first redirection (2) -- + +Warning: fopen(http://127.0.0.1:12342/foo/bar): failed to open stream: Redirection limit reached, aborting in %s +bool(false) +string(48) "GET /foo/bar HTTP/1.0 +Host: 127.0.0.1:12342 + +" +-- Test: return at first redirection -- +resource(%d) of type (stream) +array(2) { + [0]=> + string(30) "HTTP/1.0 302 Moved Temporarily" + [1]=> + string(41) "Location: http://127.0.0.1:12342/foo/bar2" +} +string(1) "1" +string(48) "GET /foo/bar HTTP/1.0 +Host: 127.0.0.1:12342 + +" +-- Test: return at first redirection (2) -- +resource(%d) of type (stream) +array(2) { + [0]=> + string(30) "HTTP/1.0 302 Moved Temporarily" + [1]=> + string(41) "Location: http://127.0.0.1:12342/foo/bar2" +} +string(1) "1" +string(48) "GET /foo/bar HTTP/1.0 +Host: 127.0.0.1:12342 + +" +-- Test: return at second redirection -- +resource(%d) of type (stream) +array(4) { + [0]=> + string(30) "HTTP/1.0 302 Moved Temporarily" + [1]=> + string(41) "Location: http://127.0.0.1:12342/foo/bar2" + [2]=> + string(30) "HTTP/1.0 301 Moved Permanently" + [3]=> + string(41) "Location: http://127.0.0.1:12342/foo/bar3" +} +string(0) "" +string(97) "GET /foo/bar HTTP/1.0 +Host: 127.0.0.1:12342 + +GET /foo/bar2 HTTP/1.0 +Host: 127.0.0.1:12342 + +"