|
|
- From bcd033699c5a4904967652de4980e4f35f17ee34 Mon Sep 17 00:00:00 2001
- From: Willy Tarreau <w@1wt.eu>
- Date: Thu, 3 Sep 2015 17:15:21 +0200
- Subject: [PATCH 14/16] BUG/MINOR: http: remove stupid HTTP_METH_NONE entry
-
- When converting the "method" fetch to a string, we used to get an empty
- string if the first character was not an upper case. This was caused by
- the lookup function which returns HTTP_METH_NONE when a lookup is not
- possible, and this method being mapped to an empty string in the array.
-
- This is a totally stupid mechanism, there's no reason for having the
- result depend on the first char. In fact the message parser already
- checks that the syntax matches an HTTP token so we can only land there
- with a valid token, hence only HTTP_METH_OTHER should be returned.
-
- This fix should be backported to all actively supported branches.
- (cherry picked from commit b7ce424be2bc9df73a3b971fa9dd6daea0332bf1)
- ---
- include/types/proto_http.h | 1 -
- src/proto_http.c | 11 ++++-------
- 2 files changed, 4 insertions(+), 8 deletions(-)
-
- diff --git a/include/types/proto_http.h b/include/types/proto_http.h
- index a5a5d31..dbce972 100644
- --- a/include/types/proto_http.h
- +++ b/include/types/proto_http.h
- @@ -219,7 +219,6 @@ enum {
-
- /* Known HTTP methods */
- enum http_meth_t {
- - HTTP_METH_NONE = 0,
- HTTP_METH_OPTIONS,
- HTTP_METH_GET,
- HTTP_METH_HEAD,
- diff --git a/src/proto_http.c b/src/proto_http.c
- index 02dc42b..46694cb 100644
- --- a/src/proto_http.c
- +++ b/src/proto_http.c
- @@ -361,12 +361,11 @@ const struct http_method_desc http_methods[26][3] = {
- [0] = { .meth = HTTP_METH_TRACE , .len=5, .text="TRACE" },
- },
- /* rest is empty like this :
- - * [1] = { .meth = HTTP_METH_NONE , .len=0, .text="" },
- + * [0] = { .meth = HTTP_METH_OTHER , .len=0, .text="" },
- */
- };
-
- const struct http_method_name http_known_methods[HTTP_METH_OTHER] = {
- - [HTTP_METH_NONE] = { "", 0 },
- [HTTP_METH_OPTIONS] = { "OPTIONS", 7 },
- [HTTP_METH_GET] = { "GET", 3 },
- [HTTP_METH_HEAD] = { "HEAD", 4 },
- @@ -793,8 +792,8 @@ struct chunk *http_error_message(struct session *s, int msgnum)
- }
-
- /*
- - * returns HTTP_METH_NONE if there is nothing valid to read (empty or non-text
- - * string), HTTP_METH_OTHER for unknown methods, or the identified method.
- + * returns a known method among HTTP_METH_* or HTTP_METH_OTHER for all unknown
- + * ones.
- */
- enum http_meth_t find_http_meth(const char *str, const int len)
- {
- @@ -810,10 +809,8 @@ enum http_meth_t find_http_meth(const char *str, const int len)
- if (likely(memcmp(str, h->text, h->len) == 0))
- return h->meth;
- };
- - return HTTP_METH_OTHER;
- }
- - return HTTP_METH_NONE;
- -
- + return HTTP_METH_OTHER;
- }
-
- /* Parse the URI from the given transaction (which is assumed to be in request
- --
- 2.4.6
-
|