@@ -2387,6 +2387,38 @@ async fn max_buf_size() {
23872387 . expect_err ( "should TooLarge error" ) ;
23882388}
23892389
2390+ #[ cfg( feature = "http1" ) ]
2391+ #[ tokio:: test]
2392+ async fn max_buf_size_split_header_boundary ( ) {
2393+ let ( listener, addr) = setup_tcp_listener ( ) ;
2394+
2395+ const MAX : usize = 8192 ;
2396+
2397+ thread:: spawn ( move || {
2398+ let mut tcp = connect ( & addr) ;
2399+ tcp. write_all ( b"GET / HTTP/1.1\r \n Host: x\r \n Connection: close\r \n X: " )
2400+ . expect ( "write 1" ) ;
2401+ tcp. write_all ( & [ b'a' ; 7000 ] ) . expect ( "write 2" ) ;
2402+ thread:: sleep ( Duration :: from_millis ( 100 ) ) ;
2403+ tcp. write_all ( & [ b'a' ; 5000 ] ) . expect ( "write 3" ) ;
2404+ tcp. write_all ( b"\r \n \r \n " ) . expect ( "write 4" ) ;
2405+
2406+ let mut buf = String :: new ( ) ;
2407+ tcp. read_to_string ( & mut buf) . expect ( "read response" ) ;
2408+
2409+ let expected = "HTTP/1.1 431 " ;
2410+ assert_eq ! ( & buf[ ..expected. len( ) ] , expected) ;
2411+ } ) ;
2412+
2413+ let ( socket, _) = listener. accept ( ) . await . unwrap ( ) ;
2414+ let socket = TokioIo :: new ( socket) ;
2415+ http1:: Builder :: new ( )
2416+ . max_buf_size ( MAX )
2417+ . serve_connection ( socket, HelloWorld )
2418+ . await
2419+ . expect_err ( "should TooLarge error" ) ;
2420+ }
2421+
23902422#[ cfg( feature = "http1" ) ]
23912423#[ tokio:: test]
23922424async fn graceful_shutdown_before_first_request_no_block ( ) {
0 commit comments