@@ -1454,6 +1454,52 @@ async fn extended_connect_request() {
1454
1454
join ( srv, h2) . await ;
1455
1455
}
1456
1456
1457
+ #[ tokio:: test]
1458
+ async fn rogue_server_odd_headers ( ) {
1459
+ h2_support:: trace_init!( ) ;
1460
+ let ( io, mut srv) = mock:: new ( ) ;
1461
+
1462
+ let srv = async move {
1463
+ let settings = srv. assert_client_handshake ( ) . await ;
1464
+ assert_default_settings ! ( settings) ;
1465
+ srv. send_frame ( frames:: headers ( 1 ) ) . await ;
1466
+ srv. recv_frame ( frames:: go_away ( 0 ) . protocol_error ( ) ) . await ;
1467
+ } ;
1468
+
1469
+ let h2 = async move {
1470
+ let ( _client, h2) = client:: handshake ( io) . await . unwrap ( ) ;
1471
+
1472
+ let err = h2. await . unwrap_err ( ) ;
1473
+ assert ! ( err. is_go_away( ) ) ;
1474
+ assert_eq ! ( err. reason( ) , Some ( Reason :: PROTOCOL_ERROR ) ) ;
1475
+ } ;
1476
+
1477
+ join ( srv, h2) . await ;
1478
+ }
1479
+
1480
+ #[ tokio:: test]
1481
+ async fn rogue_server_even_headers ( ) {
1482
+ h2_support:: trace_init!( ) ;
1483
+ let ( io, mut srv) = mock:: new ( ) ;
1484
+
1485
+ let srv = async move {
1486
+ let settings = srv. assert_client_handshake ( ) . await ;
1487
+ assert_default_settings ! ( settings) ;
1488
+ srv. send_frame ( frames:: headers ( 2 ) ) . await ;
1489
+ srv. recv_frame ( frames:: go_away ( 0 ) . protocol_error ( ) ) . await ;
1490
+ } ;
1491
+
1492
+ let h2 = async move {
1493
+ let ( _client, h2) = client:: handshake ( io) . await . unwrap ( ) ;
1494
+
1495
+ let err = h2. await . unwrap_err ( ) ;
1496
+ assert ! ( err. is_go_away( ) ) ;
1497
+ assert_eq ! ( err. reason( ) , Some ( Reason :: PROTOCOL_ERROR ) ) ;
1498
+ } ;
1499
+
1500
+ join ( srv, h2) . await ;
1501
+ }
1502
+
1457
1503
const SETTINGS : & [ u8 ] = & [ 0 , 0 , 0 , 4 , 0 , 0 , 0 , 0 , 0 ] ;
1458
1504
const SETTINGS_ACK : & [ u8 ] = & [ 0 , 0 , 0 , 4 , 1 , 0 , 0 , 0 , 0 ] ;
1459
1505
0 commit comments