Skip to content

Commit 07077e9

Browse files
authored
refactor(lib): resolve FIXME messages (#3348)
Remove outdated FIXME comments, and resolve FIXME regarding usage of `MaybeUninit`.
1 parent 860fbb3 commit 07077e9

File tree

2 files changed

+10
-29
lines changed

2 files changed

+10
-29
lines changed

src/common/io/rewind.rs

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -108,8 +108,6 @@ where
108108

109109
#[cfg(test)]
110110
mod tests {
111-
// FIXME: re-implement tests with `async/await`, this import should
112-
// trigger a warning to remind us
113111
use super::super::compat;
114112
use super::Rewind;
115113
use bytes::Bytes;

src/proto/h1/role.rs

Lines changed: 10 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -135,18 +135,13 @@ impl Http1Transaction for Server {
135135
let len;
136136
let headers_len;
137137

138-
// Unsafe: both headers_indices and headers are using uninitialized memory,
138+
// Both headers_indices and headers are using uninitialized memory,
139139
// but we *never* read any of it until after httparse has assigned
140140
// values into it. By not zeroing out the stack memory, this saves
141141
// a good ~5% on pipeline benchmarks.
142-
let mut headers_indices: [MaybeUninit<HeaderIndices>; MAX_HEADERS] = unsafe {
143-
// SAFETY: We can go safely from MaybeUninit array to array of MaybeUninit
144-
MaybeUninit::uninit().assume_init()
145-
};
142+
let mut headers_indices = [MaybeUninit::<HeaderIndices>::uninit(); MAX_HEADERS];
146143
{
147-
/* SAFETY: it is safe to go from MaybeUninit array to array of MaybeUninit */
148-
let mut headers: [MaybeUninit<httparse::Header<'_>>; MAX_HEADERS] =
149-
unsafe { MaybeUninit::uninit().assume_init() };
144+
let mut headers = [MaybeUninit::<httparse::Header<'_>>::uninit(); MAX_HEADERS];
150145
trace!(bytes = buf.len(), "Request.parse");
151146
let mut req = httparse::Request::new(&mut []);
152147
let bytes = buf.as_ref();
@@ -230,7 +225,7 @@ impl Http1Transaction for Server {
230225

231226
for header in &headers_indices[..headers_len] {
232227
// SAFETY: array is valid up to `headers_len`
233-
let header = unsafe { &*header.as_ptr() };
228+
let header = unsafe { header.assume_init_ref() };
234229
let name = header_name!(&slice[header.name.0..header.name.1]);
235230
let value = header_value!(slice.slice(header.value.0..header.value.1));
236231

@@ -936,15 +931,9 @@ impl Http1Transaction for Client {
936931

937932
// Loop to skip information status code headers (100 Continue, etc).
938933
loop {
939-
// Unsafe: see comment in Server Http1Transaction, above.
940-
let mut headers_indices: [MaybeUninit<HeaderIndices>; MAX_HEADERS] = unsafe {
941-
// SAFETY: We can go safely from MaybeUninit array to array of MaybeUninit
942-
MaybeUninit::uninit().assume_init()
943-
};
934+
let mut headers_indices = [MaybeUninit::<HeaderIndices>::uninit(); MAX_HEADERS];
944935
let (len, status, reason, version, headers_len) = {
945-
// SAFETY: We can go safely from MaybeUninit array to array of MaybeUninit
946-
let mut headers: [MaybeUninit<httparse::Header<'_>>; MAX_HEADERS] =
947-
unsafe { MaybeUninit::uninit().assume_init() };
936+
let mut headers = [MaybeUninit::<httparse::Header<'_>>::uninit(); MAX_HEADERS];
948937
trace!(bytes = buf.len(), "Response.parse");
949938
let mut res = httparse::Response::new(&mut []);
950939
let bytes = buf.as_ref();
@@ -994,7 +983,7 @@ impl Http1Transaction for Client {
994983
{
995984
for header in &mut headers_indices[..headers_len] {
996985
// SAFETY: array is valid up to `headers_len`
997-
let header = unsafe { &mut *header.as_mut_ptr() };
986+
let header = unsafe { header.assume_init_mut() };
998987
Client::obs_fold_line(&mut slice, header);
999988
}
1000989
}
@@ -1021,7 +1010,7 @@ impl Http1Transaction for Client {
10211010
headers.reserve(headers_len);
10221011
for header in &headers_indices[..headers_len] {
10231012
// SAFETY: array is valid up to `headers_len`
1024-
let header = unsafe { &*header.as_ptr() };
1013+
let header = unsafe { header.assume_init_ref() };
10251014
let name = header_name!(&slice[header.name.0..header.name.1]);
10261015
let value = header_value!(slice.slice(header.value.0..header.value.1));
10271016

@@ -1455,16 +1444,10 @@ fn record_header_indices(
14551444
let value_start = header.value.as_ptr() as usize - bytes_ptr;
14561445
let value_end = value_start + header.value.len();
14571446

1458-
// FIXME(maybe_uninit_extra)
1459-
// FIXME(addr_of)
1460-
// Currently we don't have `ptr::addr_of_mut` in stable rust or
1461-
// MaybeUninit::write, so this is some way of assigning into a MaybeUninit
1462-
// safely
1463-
let new_header_indices = HeaderIndices {
1447+
indices.write(HeaderIndices {
14641448
name: (name_start, name_end),
14651449
value: (value_start, value_end),
1466-
};
1467-
*indices = MaybeUninit::new(new_header_indices);
1450+
});
14681451
}
14691452

14701453
Ok(())

0 commit comments

Comments
 (0)