forked from quic-go/quic-go
http3: reset stream if the server sends too many 1xx responses (#5144)
This commit is contained in:
@@ -345,6 +345,8 @@ func (c *ClientConn) doRequest(req *http.Request, str *requestStream) (*http.Res
|
||||
if is1xxNonTerminal {
|
||||
num1xx++
|
||||
if num1xx > max1xxResponses {
|
||||
str.CancelRead(quic.StreamErrorCode(ErrCodeExcessiveLoad))
|
||||
str.CancelWrite(quic.StreamErrorCode(ErrCodeExcessiveLoad))
|
||||
return nil, errors.New("http3: too many 1xx informational responses")
|
||||
}
|
||||
traceGot1xxResponse(trace, resCode, textproto.MIMEHeader(res.Header))
|
||||
|
||||
@@ -412,6 +412,10 @@ func testClient1xxHandling(t *testing.T, numEarlyHints int, terminalStatus int,
|
||||
str.EXPECT().Write(gomock.Any()).DoAndReturn(buf.Write).AnyTimes()
|
||||
str.EXPECT().Close()
|
||||
str.EXPECT().Read(gomock.Any()).DoAndReturn(bytes.NewReader(rspBytes).Read).AnyTimes()
|
||||
if tooMany {
|
||||
str.EXPECT().CancelRead(quic.StreamErrorCode(ErrCodeExcessiveLoad))
|
||||
str.EXPECT().CancelWrite(quic.StreamErrorCode(ErrCodeExcessiveLoad))
|
||||
}
|
||||
conn.EXPECT().OpenStreamSync(gomock.Any()).Return(str, nil)
|
||||
|
||||
cc := (&Transport{}).NewClientConn(conn)
|
||||
|
||||
Reference in New Issue
Block a user