com php-src: Fixed #69655: php -S changes MKCALENDAR request method to MKCOL: sapi/cli/php_http_parser.c sapi/cli/tests/bug6 9655.phpt
| From: | Christoph Michael Becker | Date: | Sat, 27 Jun 2015 18:02:21 +0000 |
| Subject: | com php-src: Fixed #69655: php -S changes MKCALENDAR request method to MKCOL: sapi/cli/php_http_parser.c sapi/cli/tests/bug6 9655.phpt | ||
| Groups: | php.cvs | ||
| Request: | Send a blank email to php-cvs+get-87563@lists.php.net to get a copy of this message | ||
Commit: bbe28d3a55f8b129d4595e5202b7c9891a568509
Author: Christoph M. Becker <cmb@php.net> Sat, 27 Jun 2015 19:47:32 +0200
Parents: b811bb3920168c19aa7cc9fa51cbad0d3d127dcc
Branches: PHP-5.6 master
Link: http://git.php.net/?p=php-src.git;a=commitdiff;h=bbe28d3a55f8b129d4595e5202b7c9891a568509
Log:
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.
Bugs:
https://bugs.php.net/69655
Changed paths:
M sapi/cli/php_http_parser.c
A sapi/cli/tests/bug69655.phpt
Diff:
diff --git a/sapi/cli/php_http_parser.c b/sapi/cli/php_http_parser.c
index 2fc0405..73c6d4c 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 0000000..188b9c3
--- /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