@@ -312,7 +312,13 @@ where
312312impl < B > DynStreams < ' _ , B > {
313313 pub fn recv_headers ( & mut self , frame : frame:: Headers ) -> Result < ( ) , Error > {
314314 let mut me = self . inner . lock ( ) . unwrap ( ) ;
315-
315+ if me. store . num_wired_streams ( ) > me. counts . max_streams ( ) {
316+ tracing:: error!( "HEADERS: number of streams exceeds the upper limit." ) ;
317+ return Err ( Error :: remote_go_away (
318+ Bytes :: from ( "out of stream limit" ) ,
319+ Reason :: PROTOCOL_ERROR ,
320+ ) ) ;
321+ }
316322 me. recv_headers ( self . peer , & self . send_buffer , frame)
317323 }
318324
@@ -349,6 +355,13 @@ impl<B> DynStreams<'_, B> {
349355
350356 pub fn recv_push_promise ( & mut self , frame : frame:: PushPromise ) -> Result < ( ) , Error > {
351357 let mut me = self . inner . lock ( ) . unwrap ( ) ;
358+ if me. store . num_wired_streams ( ) > me. counts . max_streams ( ) {
359+ tracing:: error!( "PUSH_PROMISE: number of streams exceeds the upper limit." ) ;
360+ return Err ( Error :: remote_go_away (
361+ Bytes :: from ( "out of stream limit" ) ,
362+ Reason :: PROTOCOL_ERROR ,
363+ ) ) ;
364+ }
352365 me. recv_push_promise ( & self . send_buffer , frame)
353366 }
354367
0 commit comments