@@ -104,7 +104,7 @@ impl Http1Transaction for Server {
104104 Version :: HTTP_10
105105 } ;
106106
107- record_header_indices ( bytes, & req. headers , & mut headers_indices) ;
107+ record_header_indices ( bytes, & req. headers , & mut headers_indices) ? ;
108108 headers_len = req. headers . len ( ) ;
109109 //(len, subject, version, headers_len)
110110 }
@@ -590,7 +590,7 @@ impl Http1Transaction for Client {
590590 } else {
591591 Version :: HTTP_10
592592 } ;
593- record_header_indices ( bytes, & res. headers , & mut headers_indices) ;
593+ record_header_indices ( bytes, & res. headers , & mut headers_indices) ? ;
594594 let headers_len = res. headers . len ( ) ;
595595 ( len, status, version, headers_len)
596596 } ,
@@ -918,7 +918,11 @@ struct HeaderIndices {
918918 value : ( usize , usize ) ,
919919}
920920
921- fn record_header_indices ( bytes : & [ u8 ] , headers : & [ httparse:: Header ] , indices : & mut [ HeaderIndices ] ) {
921+ fn record_header_indices (
922+ bytes : & [ u8 ] ,
923+ headers : & [ httparse:: Header ] ,
924+ indices : & mut [ HeaderIndices ]
925+ ) -> Result < ( ) , :: error:: Parse > {
922926 let bytes_ptr = bytes. as_ptr ( ) as usize ;
923927
924928 // FIXME: This should be a single plain `for` loop.
@@ -945,6 +949,10 @@ fn record_header_indices(bytes: &[u8], headers: &[httparse::Header], indices: &m
945949 cfg( all( target_arch = "arm" , target_feature = "v7" , target_feature = "neon" ) )
946950 for ( header, indices) in ( headers. iter( ) . zip( indices. iter_mut( ) ) ) {
947951 {
952+ if header. name. len( ) >= ( 1 << 16 ) {
953+ debug!( "header name larger than 64kb: {:?}" , header. name) ;
954+ return Err ( :: error:: Parse :: TooLarge ) ;
955+ }
948956 let name_start = header. name. as_ptr( ) as usize - bytes_ptr;
949957 let name_end = name_start + header. name. len( ) ;
950958 indices. name = ( name_start, name_end) ;
@@ -956,6 +964,8 @@ fn record_header_indices(bytes: &[u8], headers: &[httparse::Header], indices: &m
956964 }
957965 }
958966 }
967+
968+ Ok ( ( ) )
959969}
960970
961971// Write header names as title case. The header name is assumed to be ASCII,
0 commit comments