@@ -111,13 +111,9 @@ impl Http1Transaction for Server {
111
111
let len;
112
112
let headers_len;
113
113
114
- // Unsafe: both headers_indices and headers are using uninitialized memory,
115
- // but we *never* read any of it until after httparse has assigned
116
- // values into it. By not zeroing out the stack memory, this saves
117
- // a good ~5% on pipeline benchmarks.
118
- let mut headers_indices: [ HeaderIndices ; MAX_HEADERS ] = unsafe { mem:: uninitialized ( ) } ;
114
+ let mut headers_indices: [ HeaderIndices ; MAX_HEADERS ] = unsafe { mem:: zeroed ( ) } ;
119
115
{
120
- let mut headers: [ httparse:: Header < ' _ > ; MAX_HEADERS ] = unsafe { mem :: uninitialized ( ) } ;
116
+ let mut headers = [ httparse:: EMPTY_HEADER ; MAX_HEADERS ] ;
121
117
trace ! (
122
118
"Request.parse([Header; {}], [u8; {}])" ,
123
119
headers. len( ) ,
@@ -276,7 +272,7 @@ impl Http1Transaction for Server {
276
272
277
273
fn encode (
278
274
mut msg : Encode < ' _ , Self :: Outgoing > ,
279
- mut dst : & mut Vec < u8 > ,
275
+ dst : & mut Vec < u8 > ,
280
276
) -> crate :: Result < Encoder > {
281
277
trace ! (
282
278
"Server::encode status={:?}, body={:?}, req_method={:?}" ,
@@ -562,7 +558,8 @@ impl Http1Transaction for Server {
562
558
Encoder :: length ( 0 )
563
559
} else {
564
560
extend ( dst, b"content-length: " ) ;
565
- let _ = :: itoa:: write ( & mut dst, len) ;
561
+ let mut buf = itoa:: Buffer :: new ( ) ;
562
+ extend ( dst, buf. format ( len) . as_bytes ( ) ) ;
566
563
extend ( dst, b"\r \n " ) ;
567
564
Encoder :: length ( len)
568
565
}
@@ -650,11 +647,9 @@ impl Http1Transaction for Client {
650
647
651
648
// Loop to skip information status code headers (100 Continue, etc).
652
649
loop {
653
- // Unsafe: see comment in Server Http1Transaction, above.
654
- let mut headers_indices: [ HeaderIndices ; MAX_HEADERS ] = unsafe { mem:: uninitialized ( ) } ;
650
+ let mut headers_indices: [ HeaderIndices ; MAX_HEADERS ] = unsafe { mem:: zeroed ( ) } ;
655
651
let ( len, status, version, headers_len) = {
656
- let mut headers: [ httparse:: Header < ' _ > ; MAX_HEADERS ] =
657
- unsafe { mem:: uninitialized ( ) } ;
652
+ let mut headers = [ httparse:: EMPTY_HEADER ; MAX_HEADERS ] ;
658
653
trace ! (
659
654
"Response.parse([Header; {}], [u8; {}])" ,
660
655
headers. len( ) ,
0 commit comments