summaryrefslogtreecommitdiff
path: root/sapi/cli
diff options
context:
space:
mode:
authorChristoph M. Becker <cmb@php.net>2015-06-27 19:47:32 +0200
committerChristoph M. Becker <cmb@php.net>2015-06-27 20:02:21 +0200
commitbbe28d3a55f8b129d4595e5202b7c9891a568509 (patch)
treeb4a63df3f71093a60d6329a52b07a10c83d24a93 /sapi/cli
parentb811bb3920168c19aa7cc9fa51cbad0d3d127dcc (diff)
downloadphp-git-bbe28d3a55f8b129d4595e5202b7c9891a568509.tar.gz
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.
Diffstat (limited to 'sapi/cli')
-rw-r--r--sapi/cli/php_http_parser.c11
-rw-r--r--sapi/cli/tests/bug69655.phpt30
2 files changed, 39 insertions, 2 deletions
diff --git a/sapi/cli/php_http_parser.c b/sapi/cli/php_http_parser.c
index 2fc0405499..73c6d4c1fe 100644
--- a/sapi/cli/php_http_parser.c
+++ b/sapi/cli/php_http_parser.c
@@ -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 */
diff --git a/sapi/cli/tests/bug69655.phpt b/sapi/cli/tests/bug69655.phpt
new file mode 100644
index 0000000000..188b9c31ee
--- /dev/null
+++ b/sapi/cli/tests/bug69655.phpt
@@ -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