summaryrefslogtreecommitdiff
path: root/sapi/cli/php_http_parser.c
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/php_http_parser.c
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/php_http_parser.c')
-rw-r--r--sapi/cli/php_http_parser.c11
1 files changed, 9 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 */