File tree Expand file tree Collapse file tree 2 files changed +10
-5
lines changed
test/InMemory.FunctionalTests/Http2 Expand file tree Collapse file tree 2 files changed +10
-5
lines changed Original file line number Diff line number Diff line change @@ -1158,8 +1158,12 @@ private Task ProcessWindowUpdateFrameAsync()
1158
1158
{
1159
1159
if ( stream . RstStreamReceived )
1160
1160
{
1161
- // Hard abort, do not allow any more frames on this stream.
1162
- throw CreateReceivedFrameStreamAbortedException ( stream ) ;
1161
+ // WINDOW_UPDATE received after we have already processed an inbound RST_STREAM for this stream.
1162
+ // RFC 7540 (Sections 5.1, 6.9) / RFC 9113 do not explicitly define semantics for WINDOW_UPDATE on a
1163
+ // stream in the "closed" state due to a reset by client. We surface it as a stream error (STREAM_CLOSED)
1164
+ // rather than aborting the entire connection to keep behavior deterministic and consistent with other servers.
1165
+ // https://github.com/dotnet/aspnetcore/issues/63726
1166
+ throw new Http2StreamErrorException ( _incomingFrame . StreamId , CoreStrings . Http2StreamAborted , Http2ErrorCode . STREAM_CLOSED ) ;
1163
1167
}
1164
1168
1165
1169
if ( ! stream . TryUpdateOutputWindow ( _incomingFrame . WindowUpdateSizeIncrement ) )
Original file line number Diff line number Diff line change @@ -3599,7 +3599,6 @@ public async Task RST_STREAM_IncompleteRequest_AdditionalResetFrame_IgnoreAdditi
3599
3599
AssertConnectionNoError ( ) ;
3600
3600
}
3601
3601
3602
- [ QuarantinedTest ( "https://github.com/dotnet/aspnetcore/issues/53744" ) ]
3603
3602
[ Fact ]
3604
3603
public async Task RST_STREAM_IncompleteRequest_AdditionalWindowUpdateFrame_ConnectionAborted ( )
3605
3604
{
@@ -3618,10 +3617,12 @@ public async Task RST_STREAM_IncompleteRequest_AdditionalWindowUpdateFrame_Conne
3618
3617
await SendRstStreamAsync ( 1 ) ;
3619
3618
await SendWindowUpdateAsync ( 1 , 1024 ) ;
3620
3619
3621
- await WaitForConnectionErrorAsync < Http2ConnectionErrorException > ( ignoreNonGoAwayFrames : false , expectedLastStreamId : 1 ,
3622
- Http2ErrorCode . STREAM_CLOSED , CoreStrings . FormatHttp2ErrorStreamAborted ( Http2FrameType . WINDOW_UPDATE , 1 ) ) ;
3620
+ await WaitForStreamErrorAsync ( expectedStreamId : 1 , Http2ErrorCode . STREAM_CLOSED , CoreStrings . Http2StreamAborted ) ;
3623
3621
3624
3622
tcs . TrySetResult ( ) ; // Don't let the response start until after the abort
3623
+
3624
+ await StopConnectionAsync ( expectedLastStreamId : 1 , ignoreNonGoAwayFrames : false ) ;
3625
+ AssertConnectionNoError ( ) ;
3625
3626
}
3626
3627
3627
3628
[ Fact ]
You can’t perform that action at this time.
0 commit comments