]> git.ipfire.org Git - thirdparty/haproxy.git/commitdiff
MEDIUM: h2: properly continue to parse header block when facing a 1xx response
authorWilly Tarreau <w@1wt.eu>
Tue, 31 Oct 2017 07:35:27 +0000 (08:35 +0100)
committerWilly Tarreau <w@1wt.eu>
Tue, 31 Oct 2017 17:16:19 +0000 (18:16 +0100)
We still didn't handle the 1xx responses properly.

src/mux_h2.c

index e0e2ebe57b422299f2c4c1ca7a980259cd3b1e07..0b4165e8601af37110ad8fb552824b034c0c2aab 100644 (file)
@@ -1949,6 +1949,7 @@ static int h2s_frt_make_resp_headers(struct h2s *h2s, struct buffer *buf)
         * block does not wrap and we can safely read it this way without
         * having to realign the buffer.
         */
+ next_header_block:
        ret = h1_headers_to_hdr_list(bo_ptr(buf), bo_ptr(buf) + buf->o,
                                     list, sizeof(list)/sizeof(list[0]), h1m);
        if (ret <= 0) {
@@ -2067,6 +2068,12 @@ static int h2s_frt_make_resp_headers(struct h2s *h2s, struct buffer *buf)
                else
                        h2s->st = H2_SS_CLOSED;
        }
+       else if (h1m->status >= 100 && h1m->status < 200) {
+               h1m->state = HTTP_MSG_RPBEFORE;
+               h1m->status = 0;
+               h1m->flags = 0;
+               goto next_header_block;
+       }
        else
                h1m->state = (h1m->flags & H1_MF_CLEN) ? HTTP_MSG_BODY : HTTP_MSG_CHUNK_SIZE;