]> git.ipfire.org Git - thirdparty/haproxy.git/commitdiff
BUG/MEDIUM: h1: Get the h1m state when restarting the headers parsing
authorChristopher Faulet <cfaulet@haproxy.com>
Fri, 4 Jan 2019 15:06:48 +0000 (16:06 +0100)
committerChristopher Faulet <cfaulet@haproxy.com>
Fri, 4 Jan 2019 15:23:03 +0000 (16:23 +0100)
Since the commit 0f8fb6b7f ("MINOR: h1: make the H1 headers block parser able to
parse headers only"), when headers are not received in one time, a parsing error
is returned because the local state in the function h1_headers_to_hdr_list() was
not initialized with the previous one (in fact, it was not initialized at all).

So now, we start the parsing of headers with the state H1_MSG_HDR_FIRST when the
flag H1_MF_HDRS_ONLY is set. Otherwise, we always get it from the h1m.

This patch must be backported to 1.9.

src/h1.c

index f9e8c9c0ffb327ad72c3206e07261b572e2cb1ff..38d13c6c33beae02b1cf517b0af6fcd6c062d7c2 100644 (file)
--- a/src/h1.c
+++ b/src/h1.c
@@ -272,10 +272,11 @@ int h1_headers_to_hdr_list(char *start, const char *stop,
                state = H1_MSG_HDR_FIRST;
                h1m->next = 0;
        }
-       else if (h1m->state == H1_MSG_RQBEFORE || h1m->state == H1_MSG_RPBEFORE)
+       else {
                state = h1m->state;
-       else
-               restarting = 1;
+               if (h1m->state != H1_MSG_RQBEFORE && h1m->state != H1_MSG_RPBEFORE)
+                       restarting = 1;
+       }
 
        ptr   = start + h1m->next;
        end   = stop;