@@ -8,9 +8,9 @@ use std::mem;
88#[ cfg( any( test, feature = "server" , feature = "ffi" ) ) ]
99use bytes:: Bytes ;
1010use bytes:: BytesMut ;
11- use http:: header:: { self , Entry , HeaderName , HeaderValue } ;
1211#[ cfg( feature = "server" ) ]
1312use http:: header:: ValueIter ;
13+ use http:: header:: { self , Entry , HeaderName , HeaderValue } ;
1414use http:: { HeaderMap , Method , StatusCode , Version } ;
1515
1616use crate :: body:: DecodedLength ;
@@ -29,46 +29,35 @@ const AVERAGE_HEADER_SIZE: usize = 30; // totally scientific
2929
3030macro_rules! header_name {
3131 ( $bytes: expr) => { {
32- #[ cfg( debug_assertions) ]
3332 {
3433 match HeaderName :: from_bytes( $bytes) {
3534 Ok ( name) => name,
36- Err ( _) => panic!(
37- "illegal header name from httparse: {:?}" ,
38- :: bytes:: Bytes :: copy_from_slice( $bytes)
39- ) ,
40- }
41- }
42-
43- #[ cfg( not( debug_assertions) ) ]
44- {
45- match HeaderName :: from_bytes( $bytes) {
46- Ok ( name) => name,
47- Err ( _) => panic!( "illegal header name from httparse: {:?}" , $bytes) ,
35+ Err ( e) => maybe_panic!( e) ,
4836 }
4937 }
5038 } } ;
5139}
5240
5341macro_rules! header_value {
5442 ( $bytes: expr) => { {
55- #[ cfg( debug_assertions) ]
5643 {
57- let __hvb: :: bytes:: Bytes = $bytes;
58- match HeaderValue :: from_maybe_shared( __hvb. clone( ) ) {
59- Ok ( name) => name,
60- Err ( _) => panic!( "illegal header value from httparse: {:?}" , __hvb) ,
61- }
62- }
63-
64- #[ cfg( not( debug_assertions) ) ]
65- {
66- // Unsafe: httparse already validated header value
6744 unsafe { HeaderValue :: from_maybe_shared_unchecked( $bytes) }
6845 }
6946 } } ;
7047}
7148
49+ macro_rules! maybe_panic {
50+ ( $( $arg: tt) * ) => ( {
51+ let _err = ( $( $arg) * ) ;
52+ if cfg!( debug_assertions) {
53+ panic!( "{:?}" , _err) ;
54+ } else {
55+ error!( "Internal Hyper error, please report {:?}" , _err) ;
56+ return Err ( Parse :: Internal )
57+ }
58+ } )
59+ }
60+
7261pub ( super ) fn parse_headers < T > (
7362 bytes : & mut BytesMut ,
7463 ctx : ParseContext < ' _ > ,
@@ -891,8 +880,7 @@ impl Http1Transaction for Client {
891880 ) ;
892881 let mut res = httparse:: Response :: new ( & mut headers) ;
893882 let bytes = buf. as_ref ( ) ;
894- match ctx. h1_parser_config . parse_response ( & mut res, bytes)
895- {
883+ match ctx. h1_parser_config . parse_response ( & mut res, bytes) {
896884 Ok ( httparse:: Status :: Complete ( len) ) => {
897885 trace ! ( "Response.parse Complete({})" , len) ;
898886 let status = StatusCode :: from_u16 ( res. code . unwrap ( ) ) ?;
0 commit comments