Skip to content

Commit 36e467a

Browse files
author
Norbert Fabritius
committed
Fix offset calculation in test cases
1 parent dbd3197 commit 36e467a

File tree

1 file changed

+20
-2
lines changed

1 file changed

+20
-2
lines changed

heimlig/src/integration/raw_jobs.rs

+20-2
Original file line numberDiff line numberDiff line change
@@ -2137,6 +2137,7 @@ mod test {
21372137
};
21382138
let request_raw: RequestRaw = request.into();
21392139
let request_raw_ptr = &request_raw as *const RequestRaw as *const u8;
2140+
// SAFETY: Raw data format of RequestResponseRawPair in : RequestRaw || ResponseRaw
21402141
let reconstructed_request_raw = unsafe { RequestRaw::from_raw(request_raw_ptr) }
21412142
.expect("failed to create raw request from pointer.");
21422143
let always_valid = |_data: *const u8, _size: u32| true;
@@ -2167,22 +2168,31 @@ mod test {
21672168
const OUTPUT_SIZE: usize = 16;
21682169
let mut shared_memory = [0u8; size_of::<RequestRaw>() + OUTPUT_SIZE];
21692170
let request_response_start = shared_memory.as_mut_ptr();
2170-
let output_start = unsafe { shared_memory.as_mut_ptr().add(size_of::<RequestRaw>()) };
2171+
// SAFETY: Raw data format in shared memory: RequestResponseRawPair || output
2172+
let output_start = unsafe {
2173+
shared_memory
2174+
.as_mut_ptr()
2175+
.add(size_of::<RequestResponseRawPair>())
2176+
};
21712177
let request = GetRandom {
21722178
client_id,
21732179
request_id,
2180+
// SAFETY: Raw data format in shared memory: RequestResponseRawPair || output
21742181
output: unsafe { slice::from_raw_parts_mut(output_start, OUTPUT_SIZE) },
21752182
};
21762183
let request_raw = request.into();
21772184
let mut request_response_pair =
2185+
// SAFETY: Raw data format in shared memory: RequestResponseRawPair || output
21782186
unsafe { RequestResponseRawPair::from_raw(request_response_start) }
21792187
.expect("failed to create request-response pair from pointer.");
21802188
request_response_pair.request = request_raw;
21812189

21822190
let is_in_shared_memory_1st_half = |data: *const u8, size: u32| {
21832191
let start_data = data;
2192+
// SAFETY: Raw pointer is trusted in unit tests
21842193
let end_data = unsafe { start_data.add(size as usize) };
21852194
let start_shared_memory = shared_memory.as_ptr();
2195+
// SAFETY: Calculation to determine first half of raw memory region
21862196
let end_shared_memory_1st_half =
21872197
unsafe { start_shared_memory.add(shared_memory.len() / 2) };
21882198
start_shared_memory <= start_data && end_data <= end_shared_memory_1st_half
@@ -2210,22 +2220,30 @@ mod test {
22102220
const OUTPUT_SIZE: usize = 16;
22112221
let mut shared_memory = [0u8; size_of::<RequestRaw>() + OUTPUT_SIZE];
22122222
let request_response_start = shared_memory.as_mut_ptr();
2213-
let output_start = unsafe { shared_memory.as_mut_ptr().add(size_of::<RequestRaw>()) };
2223+
// SAFETY: Raw data format in shared memory: RequestResponseRawPair || output
2224+
let output_start = unsafe {
2225+
shared_memory
2226+
.as_mut_ptr()
2227+
.add(size_of::<RequestResponseRawPair>())
2228+
};
22142229
let request = GetRandom {
22152230
client_id,
22162231
request_id,
2232+
// SAFETY: Raw data format in shared memory: RequestResponseRawPair || output
22172233
output: unsafe { slice::from_raw_parts_mut(output_start, OUTPUT_SIZE) },
22182234
};
22192235
let request_raw = request.into();
22202236

22212237
// Invalidate enum tag of raw request
2238+
// SAFETY: Raw data format of RequestResponseRawPair in shared memory: RequestRaw || ResponseRaw
22222239
unsafe {
22232240
core::ptr::copy(&request_raw, request_response_start as *mut RequestRaw, 1);
22242241
let tag: *mut u8 = request_response_start.add(offset_of!(RequestRaw, data));
22252242
const INVALID_TAG: u8 = 0xFF;
22262243
*tag = INVALID_TAG;
22272244
}
22282245

2246+
// SAFETY: Testing errors in conversion from raw memory to RequestResponseRawPair
22292247
match unsafe { RequestResponseRawPair::from_raw(request_response_start) } {
22302248
Ok(_) => {
22312249
panic!("Expected request raw reconstruction to fail")

0 commit comments

Comments
 (0)