[master] 4460caa Properly handle END_STREAM for HEADERS+CONTINUATION

Dag Haavi Finstad daghf at varnish-software.com
Tue Aug 8 15:49:06 CEST 2017


commit 4460caa89ec340e07284917b6b6085c4f960fa87
Author: Dag Haavi Finstad <daghf at varnish-software.com>
Date:   Thu Jul 13 17:35:37 2017 +0200

    Properly handle END_STREAM for HEADERS+CONTINUATION
    
    In a sequence of HEADERS and CONTINUATION frames, the END_STREAM flag is
    set in the HEADERS frame, and the END_HEADERS flag is set in the last
    CONTINUATION frame.

diff --git a/bin/varnishd/http2/cache_http2_proto.c b/bin/varnishd/http2/cache_http2_proto.c
index a264626..25c18a2 100644
--- a/bin/varnishd/http2/cache_http2_proto.c
+++ b/bin/varnishd/http2/cache_http2_proto.c
@@ -526,9 +526,6 @@ h2_end_headers(struct worker *wrk, const struct h2_sess *h2,
 	}
 	VSLb_ts_req(req, "Req", req->t_req);
 
-	if (h2->rxf_flags & H2FF_HEADERS_END_STREAM)
-		req->req_body_status = REQ_BODY_NONE;
-
 	req->req_step = R_STP_TRANSPORT;
 	req->task.func = h2_do_req;
 	req->task.priv = req;
@@ -602,6 +599,10 @@ h2_rx_headers(struct worker *wrk, struct h2_sess *h2, struct h2_req *r2)
 		h2_del_req(wrk, r2);
 		return (h2e);
 	}
+
+	if (h2->rxf_flags & H2FF_HEADERS_END_STREAM)
+		req->req_body_status = REQ_BODY_NONE;
+
 	if (h2->rxf_flags & H2FF_HEADERS_END_HEADERS)
 		return (h2_end_headers(wrk, h2, req, r2));
 	return (0);
diff --git a/bin/varnishtest/tests/t02003.vtc b/bin/varnishtest/tests/t02003.vtc
index 86417a0..34b88c2 100644
--- a/bin/varnishtest/tests/t02003.vtc
+++ b/bin/varnishtest/tests/t02003.vtc
@@ -445,6 +445,15 @@ client c1 {
 	} -run
 } -run
 
+client c1 {
+	stream 1 {
+		txreq -nohdrend
+		txcont -hdr "bar" "foo"
+		rxresp
+		expect resp.status == 200
+	} -run
+} -run
+
 varnish v1 -vsl_catchup
 
 varnish v1 -expect MEMPOOL.req0.live == 0



More information about the varnish-commit mailing list