Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
BUG/MEDIUM: mux-h2: refine connection vs stream error on headers
Commit 7021a8c ("BUG/MINOR: mux-h2: also count streams for refused ones") addressed stream counting issues on some error cases but not completely correctly regarding the conn_err vs stream_err case. Indeed, contrary to the initial analysis, h2c_dec_hdrs() can set H2_CS_ERROR when facing some unrecoverable protocol errors, and it's not correct to send it to strm_err which will only send the RST_STREAM frame and the subsequent GOAWAY frame is in fact the result of the read timeout. The difficulty behind this lies on the sequence of output validations because h2c_dec_hdrs() returns two results at once: - frame processing status (done/incomplete/failed) - connection error status The original ordering requires to write 2 exemplaries of the exact same error handling code disposed differently, which the patch above tried to factor to one. After careful inspection of h2c_dec_hdrs() and its comments, it's clear that it always returns -1 on failure, *including* connection errors. This means we can rearrange the test to get rid of the missing data first, and immediately enter the no-return zone where both the stream and connection errors can be checked at the same place, making sure to consistently maintain error counters. This is way better because we don't have to update stream counters on the error path anymore. h2spec now passes the test much faster. This will need to be backported to the same branches as the commit above, which was already backported to 2.9.
- Loading branch information