|
|
- From 2943734024525d4b9aeec13cca2c1d230c358ee5 Mon Sep 17 00:00:00 2001
- From: Willy Tarreau <w@1wt.eu>
- Date: Wed, 1 Apr 2015 19:16:09 +0200
- Subject: [PATCH 9/9] BUG/MEDIUM: http: hdr_cnt would not count any header when
- called without name
-
- It's documented that these sample fetch functions should count all headers
- and/or all values when called with no name but in practice it's not what is
- being done as a missing name causes an immediate return and an absence of
- result.
-
- This bug is present in 1.5 as well and must be backported.
- (cherry picked from commit 601a4d1741100d7a861b6d9b66561335c9911277)
- ---
- src/proto_http.c | 20 ++++++++++++++------
- 1 file changed, 14 insertions(+), 6 deletions(-)
-
- diff --git a/src/proto_http.c b/src/proto_http.c
- index c49c4f4..ccd52ad 100644
- --- a/src/proto_http.c
- +++ b/src/proto_http.c
- @@ -10014,15 +10014,19 @@ smp_fetch_fhdr_cnt(struct proxy *px, struct session *l4, void *l7, unsigned int
- struct hdr_ctx ctx;
- const struct http_msg *msg = ((opt & SMP_OPT_DIR) == SMP_OPT_DIR_REQ) ? &txn->req : &txn->rsp;
- int cnt;
- + const char *name = NULL;
- + int len = 0;
-
- - if (!args || args->type != ARGT_STR)
- - return 0;
- + if (args && args->type == ARGT_STR) {
- + name = args->data.str.str;
- + len = args->data.str.len;
- + }
-
- CHECK_HTTP_MESSAGE_FIRST();
-
- ctx.idx = 0;
- cnt = 0;
- - while (http_find_full_header2(args->data.str.str, args->data.str.len, msg->chn->buf->p, idx, &ctx))
- + while (http_find_full_header2(name, len, msg->chn->buf->p, idx, &ctx))
- cnt++;
-
- smp->type = SMP_T_UINT;
- @@ -10101,15 +10105,19 @@ smp_fetch_hdr_cnt(struct proxy *px, struct session *l4, void *l7, unsigned int o
- struct hdr_ctx ctx;
- const struct http_msg *msg = ((opt & SMP_OPT_DIR) == SMP_OPT_DIR_REQ) ? &txn->req : &txn->rsp;
- int cnt;
- + const char *name = NULL;
- + int len = 0;
-
- - if (!args || args->type != ARGT_STR)
- - return 0;
- + if (args && args->type == ARGT_STR) {
- + name = args->data.str.str;
- + len = args->data.str.len;
- + }
-
- CHECK_HTTP_MESSAGE_FIRST();
-
- ctx.idx = 0;
- cnt = 0;
- - while (http_find_header2(args->data.str.str, args->data.str.len, msg->chn->buf->p, idx, &ctx))
- + while (http_find_header2(name, len, msg->chn->buf->p, idx, &ctx))
- cnt++;
-
- smp->type = SMP_T_UINT;
- --
- 2.0.5
-
|