summaryrefslogtreecommitdiff
path: root/sapi/cli
diff options
context:
space:
mode:
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