mirror of
https://github.com/php/php-src.git
synced 2024-09-21 18:07:23 +00:00
Fixed #69655: php -S changes MKCALENDAR request method to MKCOL
The parsing of the request method in the CLI server has been faulty, so that several unsupported methods have been recognized as other methods.
This commit is contained in:
parent
b811bb3920
commit
bbe28d3a55
@ -604,15 +604,20 @@ size_t php_http_parser_execute (php_http_parser *parser,
|
||||
goto error;
|
||||
|
||||
matcher = method_strings[parser->method];
|
||||
if (ch == ' ' && (matcher[index] == '\0' || parser->method == PHP_HTTP_NOT_IMPLEMENTED)) {
|
||||
if (ch == ' ') {
|
||||
if (parser->method != PHP_HTTP_NOT_IMPLEMENTED && matcher[index] != '\0') {
|
||||
parser->method = PHP_HTTP_NOT_IMPLEMENTED;
|
||||
}
|
||||
state = s_req_spaces_before_url;
|
||||
} else if (ch == matcher[index]) {
|
||||
} else if (parser->method == PHP_HTTP_NOT_IMPLEMENTED || ch == matcher[index]) {
|
||||
; /* nada */
|
||||
} else if (parser->method == PHP_HTTP_CONNECT) {
|
||||
if (index == 1 && ch == 'H') {
|
||||
parser->method = PHP_HTTP_CHECKOUT;
|
||||
} else if (index == 2 && ch == 'P') {
|
||||
parser->method = PHP_HTTP_COPY;
|
||||
} else {
|
||||
parser->method = PHP_HTTP_NOT_IMPLEMENTED;
|
||||
}
|
||||
} else if (parser->method == PHP_HTTP_MKCOL) {
|
||||
if (index == 1 && ch == 'O') {
|
||||
@ -623,6 +628,8 @@ size_t php_http_parser_execute (php_http_parser *parser,
|
||||
parser->method = PHP_HTTP_MSEARCH;
|
||||
} else if (index == 2 && ch == 'A') {
|
||||
parser->method = PHP_HTTP_MKACTIVITY;
|
||||
} else {
|
||||
parser->method = PHP_HTTP_NOT_IMPLEMENTED;
|
||||
}
|
||||
} else if (index == 1 && parser->method == PHP_HTTP_POST && ch == 'R') {
|
||||
parser->method = PHP_HTTP_PROPFIND; /* or HTTP_PROPPATCH */
|
||||
|
30
sapi/cli/tests/bug69655.phpt
Normal file
30
sapi/cli/tests/bug69655.phpt
Normal file
@ -0,0 +1,30 @@
|
||||
--TEST--
|
||||
Bug #69655 (php -S changes MKCALENDAR request method to MKCOL)
|
||||
--INI--
|
||||
allow_url_fopen=1
|
||||
--SKIPIF--
|
||||
<?php
|
||||
include "skipif.inc";
|
||||
?>
|
||||
--FILE--
|
||||
<?php
|
||||
include "php_cli_server.inc";
|
||||
php_cli_server_start();
|
||||
foreach (['MKCALENDAR', 'MKCO', 'MKCOLL', 'M'] as $method) {
|
||||
$context = stream_context_create(['http' => ['method' => $method]]);
|
||||
// the following is supposed to emit a warning for unsupported methods
|
||||
file_get_contents("http://" . PHP_CLI_SERVER_ADDRESS, false, $context);
|
||||
}
|
||||
?>
|
||||
--EXPECTF--
|
||||
Warning: file_get_contents(http://localhost:8964): failed to open stream: HTTP request failed! HTTP/1.0 501 Not Implemented
|
||||
in %s on line %d
|
||||
|
||||
Warning: file_get_contents(http://localhost:8964): failed to open stream: HTTP request failed! HTTP/1.0 501 Not Implemented
|
||||
in %s on line %d
|
||||
|
||||
Warning: file_get_contents(http://localhost:8964): failed to open stream: HTTP request failed! HTTP/1.0 501 Not Implemented
|
||||
in %s on line %d
|
||||
|
||||
Warning: file_get_contents(http://localhost:8964): failed to open stream: HTTP request failed! HTTP/1.0 501 Not Implemented
|
||||
in %s on line %d
|
Loading…
Reference in New Issue
Block a user