@@ -311,7 +311,16 @@ where
311311impl < B > DynStreams < ' _ , B > {
312312 pub fn recv_headers ( & mut self , frame : frame:: Headers ) -> Result < ( ) , Error > {
313313 let mut me = self . inner . lock ( ) . unwrap ( ) ;
314-
314+ if me. store . num_wired_streams ( ) > me. counts . max_streams ( ) {
315+ tracing:: error!(
316+ "HEADERS: number of streams exceeds the upper limit ({})" ,
317+ me. counts. max_streams( )
318+ ) ;
319+ return Err ( Error :: remote_go_away (
320+ Bytes :: from ( "out of stream limit" ) ,
321+ Reason :: PROTOCOL_ERROR ,
322+ ) ) ;
323+ }
315324 me. recv_headers ( self . peer , & self . send_buffer , frame)
316325 }
317326
@@ -348,6 +357,17 @@ impl<B> DynStreams<'_, B> {
348357
349358 pub fn recv_push_promise ( & mut self , frame : frame:: PushPromise ) -> Result < ( ) , Error > {
350359 let mut me = self . inner . lock ( ) . unwrap ( ) ;
360+
361+ if me. store . num_wired_streams ( ) > me. counts . max_streams ( ) {
362+ tracing:: error!(
363+ "PUSH_PROMISE: number of streams exceeds the upper limit ({})" ,
364+ me. counts. max_streams( )
365+ ) ;
366+ return Err ( Error :: remote_go_away (
367+ Bytes :: from ( "out of stream limit" ) ,
368+ Reason :: PROTOCOL_ERROR ,
369+ ) ) ;
370+ }
351371 me. recv_push_promise ( & self . send_buffer , frame)
352372 }
353373
0 commit comments