Skip to content

Commit dd4c53d

Browse files
committed
fix: send PROTOCOL_ERROR instead of REFUSED_STREAM for oversized headers
1 parent 7dbb5c5 commit dd4c53d

File tree

5 files changed

+11
-11
lines changed

5 files changed

+11
-11
lines changed

src/proto/streams/recv.rs

+3-3
Original file line numberDiff line numberDiff line change
@@ -719,16 +719,16 @@ impl Recv {
719719
// > that it cannot process.
720720
//
721721
// So, if peer is a server, we'll send a 431. In either case,
722-
// an error is recorded, which will send a REFUSED_STREAM,
722+
// an error is recorded, which will send a PROTOCOL_ERROR,
723723
// since we don't want any of the data frames either.
724724
tracing::debug!(
725-
"stream error REFUSED_STREAM -- recv_push_promise: \
725+
"stream error PROTOCOL_ERROR -- recv_push_promise: \
726726
headers frame is over size; promised_id={:?};",
727727
frame.promised_id(),
728728
);
729729
return Err(Error::library_reset(
730730
frame.promised_id(),
731-
Reason::REFUSED_STREAM,
731+
Reason::PROTOCOL_ERROR,
732732
));
733733
}
734734

src/proto/streams/streams.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -504,15 +504,15 @@ impl Inner {
504504

505505
actions.send.schedule_implicit_reset(
506506
stream,
507-
Reason::REFUSED_STREAM,
507+
Reason::PROTOCOL_ERROR,
508508
counts,
509509
&mut actions.task);
510510

511511
actions.recv.enqueue_reset_expiration(stream, counts);
512512

513513
Ok(())
514514
} else {
515-
Err(Error::library_reset(stream.id, Reason::REFUSED_STREAM))
515+
Err(Error::library_reset(stream.id, Reason::PROTOCOL_ERROR))
516516
}
517517
},
518518
Err(RecvHeaderBlockError::State(err)) => Err(err),

tests/h2-tests/tests/client_request.rs

+3-3
Original file line numberDiff line numberDiff line change
@@ -844,7 +844,7 @@ async fn recv_too_big_headers() {
844844
srv.send_frame(frames::headers(3).response(200)).await;
845845
// no reset for 1, since it's closed anyway
846846
// but reset for 3, since server hasn't closed stream
847-
srv.recv_frame(frames::reset(3).refused()).await;
847+
srv.recv_frame(frames::reset(3).protocol_error()).await;
848848
idle_ms(10).await;
849849
};
850850

@@ -865,7 +865,7 @@ async fn recv_too_big_headers() {
865865
// waiting for a response.
866866
let req1 = tokio::spawn(async move {
867867
let err = req1.expect("send_request").0.await.expect_err("response1");
868-
assert_eq!(err.reason(), Some(Reason::REFUSED_STREAM));
868+
assert_eq!(err.reason(), Some(Reason::PROTOCOL_ERROR));
869869
});
870870

871871
let request = Request::builder()
@@ -876,7 +876,7 @@ async fn recv_too_big_headers() {
876876
let req2 = client.send_request(request, true);
877877
let req2 = tokio::spawn(async move {
878878
let err = req2.expect("send_request").0.await.expect_err("response2");
879-
assert_eq!(err.reason(), Some(Reason::REFUSED_STREAM));
879+
assert_eq!(err.reason(), Some(Reason::PROTOCOL_ERROR));
880880
});
881881

882882
let conn = tokio::spawn(async move {

tests/h2-tests/tests/push_promise.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -249,7 +249,7 @@ async fn recv_push_promise_over_max_header_list_size() {
249249
frames::push_promise(1, 2).request("GET", "https://http2.akamai.com/style.css"),
250250
)
251251
.await;
252-
srv.recv_frame(frames::reset(2).refused()).await;
252+
srv.recv_frame(frames::reset(2).protocol_error()).await;
253253
srv.send_frame(frames::headers(1).response(200).eos()).await;
254254
idle_ms(10).await;
255255
};
@@ -272,7 +272,7 @@ async fn recv_push_promise_over_max_header_list_size() {
272272
.0
273273
.await
274274
.expect_err("response");
275-
assert_eq!(err.reason(), Some(Reason::REFUSED_STREAM));
275+
assert_eq!(err.reason(), Some(Reason::PROTOCOL_ERROR));
276276
};
277277

278278
conn.drive(req).await;

tests/h2-tests/tests/server.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -866,7 +866,7 @@ async fn too_big_headers_sends_reset_after_431_if_not_eos() {
866866
client
867867
.recv_frame(frames::headers(1).response(431).eos())
868868
.await;
869-
client.recv_frame(frames::reset(1).refused()).await;
869+
client.recv_frame(frames::reset(1).protocol_error()).await;
870870
};
871871

872872
let srv = async move {

0 commit comments

Comments
 (0)