Hi,

On Wed, Jan 24, 2018 at 12:13:07PM +0800, klzgrad wrote:
> Hi,
> 
> I think I found a new issue while inspecting the source code.
> 
> In h2_frt_transfer_data(), the paddings are not added to the
> connection and stream flow control counters, h2c->rcvd_c and
> h2c->rcvd_s. But it should, per RFC 7540 6.1:
> 
> > The entire DATA frame payload is included in flow control, including the 
> > Pad Length and Padding fields if present.

You're right, I think I broke it when modifying the DATA frames parser
to handle partial frames recently :-(

Does the attached patch fix the problem for you ?

Please note that it will not address your other issue (lack of accounting
of DATA frames subject to an RST) though, it will require a bit more work
to avoid breaking what currently works.

Thanks,
Willy
diff --git a/src/mux_h2.c b/src/mux_h2.c
index 7bb51ea..4196e75 100644
--- a/src/mux_h2.c
+++ b/src/mux_h2.c
@@ -2821,6 +2821,9 @@ static int h2_frt_transfer_data(struct h2s *h2s, struct 
buffer *buf, int count)
        /* here we're done with the frame, all the payload (except padding) was
         * transferred.
         */
+       h2c->rcvd_c += h2c->dpl;
+       h2c->rcvd_s += h2c->dpl;
+       h2c->dpl = 0;
        h2c->st0 = H2_CS_FRAME_A; // send the corresponding window update
 
        /* don't send it before returning data!

Reply via email to