diff options
author | Adam Harvey <aharvey@php.net> | 2013-06-19 11:32:37 -0700 |
---|---|---|
committer | Adam Harvey <aharvey@php.net> | 2013-06-20 09:31:57 -0700 |
commit | 283f56af6696f57400bdbf8ce29ee66e64249c0d (patch) | |
tree | 070d31310cb4aea0105be3f7987e63a48e90738f /sapi/cli/tests | |
parent | b5978e239ee308e425843e40eb6ab2a9f0beba83 (diff) | |
download | php-git-283f56af6696f57400bdbf8ce29ee66e64249c0d.tar.gz |
Change the search in get_status_string() to correctly handle unknown codes.
This previously used a buggy implementation of binary search that would loop
infinitely for unknown codes when searching in reason arrays of particular
sizes (such as the one we have at the moment). Since C provides bsearch(),
we'll just use that instead, since libc authors hopefully get this right.
There was also an additional bug that was masked by the first one: the design
was that an unknown code would result in get_status_string() returning NULL,
which would then result in a segfault in append_http_status_line(), since it
assumed that it would always receive a valid string pointer that could be
handed off to smart_str_appends_ex(). We'll now return a placeholder in that
case.
Fixes bug #65066 (Cli server not responsive when responding with 422 http
status code).
Diffstat (limited to 'sapi/cli/tests')
-rw-r--r-- | sapi/cli/tests/bug65066_100.phpt | 39 | ||||
-rw-r--r-- | sapi/cli/tests/bug65066_422.phpt | 39 | ||||
-rw-r--r-- | sapi/cli/tests/bug65066_511.phpt | 39 |
3 files changed, 117 insertions, 0 deletions
diff --git a/sapi/cli/tests/bug65066_100.phpt b/sapi/cli/tests/bug65066_100.phpt new file mode 100644 index 0000000000..3a97c7e910 --- /dev/null +++ b/sapi/cli/tests/bug65066_100.phpt @@ -0,0 +1,39 @@ +--TEST-- +Bug #65066 (Cli server not responsive when responding with 422 http status code): 100 status code +--INI-- +allow_url_fopen=1 +--SKIPIF-- +<?php +include "skipif.inc"; +?> +--FILE-- +<?php +include "php_cli_server.inc"; +php_cli_server_start('http_response_code(100);'); + +list($host, $port) = explode(':', PHP_CLI_SERVER_ADDRESS); +$port = intval($port)?:80; + +$fp = fsockopen($host, $port, $errno, $errstr, 0.5); +if (!$fp) { + die("connect failed"); +} + +if(fwrite($fp, <<<HEADER +GET / HTTP/1.1 +Host: {$host} + + +HEADER +)) { + while (!feof($fp)) { + echo fgets($fp); + } +} +?> +--EXPECTF-- +HTTP/1.1 100 Continue +Host: %s +Connection: close +X-Powered-By: PHP/%s +Content-type: text/html diff --git a/sapi/cli/tests/bug65066_422.phpt b/sapi/cli/tests/bug65066_422.phpt new file mode 100644 index 0000000000..2552d1d11d --- /dev/null +++ b/sapi/cli/tests/bug65066_422.phpt @@ -0,0 +1,39 @@ +--TEST-- +Bug #65066 (Cli server not responsive when responding with 422 http status code): 422 status code +--INI-- +allow_url_fopen=1 +--SKIPIF-- +<?php +include "skipif.inc"; +?> +--FILE-- +<?php +include "php_cli_server.inc"; +php_cli_server_start('http_response_code(422);'); + +list($host, $port) = explode(':', PHP_CLI_SERVER_ADDRESS); +$port = intval($port)?:80; + +$fp = fsockopen($host, $port, $errno, $errstr, 0.5); +if (!$fp) { + die("connect failed"); +} + +if(fwrite($fp, <<<HEADER +GET / HTTP/1.1 +Host: {$host} + + +HEADER +)) { + while (!feof($fp)) { + echo fgets($fp); + } +} +?> +--EXPECTF-- +HTTP/1.1 422 Unknown Status Code +Host: %s +Connection: close +X-Powered-By: PHP/%s +Content-type: text/html diff --git a/sapi/cli/tests/bug65066_511.phpt b/sapi/cli/tests/bug65066_511.phpt new file mode 100644 index 0000000000..aa4a9a0030 --- /dev/null +++ b/sapi/cli/tests/bug65066_511.phpt @@ -0,0 +1,39 @@ +--TEST-- +Bug #65066 (Cli server not responsive when responding with 422 http status code): 511 status code +--INI-- +allow_url_fopen=1 +--SKIPIF-- +<?php +include "skipif.inc"; +?> +--FILE-- +<?php +include "php_cli_server.inc"; +php_cli_server_start('http_response_code(511);'); + +list($host, $port) = explode(':', PHP_CLI_SERVER_ADDRESS); +$port = intval($port)?:80; + +$fp = fsockopen($host, $port, $errno, $errstr, 0.5); +if (!$fp) { + die("connect failed"); +} + +if(fwrite($fp, <<<HEADER +GET / HTTP/1.1 +Host: {$host} + + +HEADER +)) { + while (!feof($fp)) { + echo fgets($fp); + } +} +?> +--EXPECTF-- +HTTP/1.1 511 Network Authentication Required +Host: %s +Connection: close +X-Powered-By: PHP/%s +Content-type: text/html |