Skip to content

Commit 5b754a4

Browse files
author
Norbert Fabritius
committed
Address code review
* Make sure "shared_memory" regions in unit tests * Simplify unsafe operations in test_invalid_enum_tag test
1 parent 671c747 commit 5b754a4

File tree

1 file changed

+13
-11
lines changed

1 file changed

+13
-11
lines changed

heimlig/src/integration/raw_jobs.rs

+13-11
Original file line numberDiff line numberDiff line change
@@ -2129,15 +2129,15 @@ mod test {
21292129
fn test_serialize_deserialize() {
21302130
let client_id = ClientId(5);
21312131
let request_id = RequestId(7);
2132-
let mut shared_memory = [0u8; 16];
2132+
let mut output_buffer = [0u8; 16];
21332133
let request = GetRandom {
21342134
client_id,
21352135
request_id,
2136-
output: &mut shared_memory,
2136+
output: &mut output_buffer,
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
2140+
// SAFETY: RequestRaw is reconstructed from instance on the stack created just now
21412141
let reconstructed_request_raw = unsafe { RequestRaw::from_raw(request_raw_ptr) }
21422142
.expect("failed to create raw request from pointer.");
21432143
let always_valid = |_data: *const u8, _size: u32| true;
@@ -2152,8 +2152,8 @@ mod test {
21522152
} => {
21532153
assert_eq!(reconstructed_client_id, client_id);
21542154
assert_eq!(reconstructed_request_id, request_id);
2155-
assert_eq!(reconstructed_output.as_ptr(), shared_memory.as_ptr());
2156-
assert_eq!(reconstructed_output.len(), shared_memory.len());
2155+
assert_eq!(reconstructed_output.as_ptr(), output_buffer.as_ptr());
2156+
assert_eq!(reconstructed_output.len(), output_buffer.len());
21572157
}
21582158
_ => {
21592159
panic!("Unexpected reconstructed request type")
@@ -2166,7 +2166,7 @@ mod test {
21662166
let client_id = ClientId(5);
21672167
let request_id = RequestId(7);
21682168
const OUTPUT_SIZE: usize = 16;
2169-
let mut shared_memory = [0u8; size_of::<RequestRaw>() + OUTPUT_SIZE];
2169+
let mut shared_memory = [0u8; size_of::<RequestResponseRawPair>() + OUTPUT_SIZE];
21702170
let request_response_start = shared_memory.as_mut_ptr();
21712171
// SAFETY: Raw data format in shared memory: RequestResponseRawPair || output
21722172
let output_start = unsafe {
@@ -2218,7 +2218,7 @@ mod test {
22182218
let client_id = ClientId(5);
22192219
let request_id = RequestId(7);
22202220
const OUTPUT_SIZE: usize = 16;
2221-
let mut shared_memory = [0u8; size_of::<RequestRaw>() + OUTPUT_SIZE];
2221+
let mut shared_memory = [0u8; size_of::<RequestResponseRawPair>() + OUTPUT_SIZE];
22222222
let request_response_start = shared_memory.as_mut_ptr();
22232223
// SAFETY: Raw data format in shared memory: RequestResponseRawPair || output
22242224
let output_start = unsafe {
@@ -2232,13 +2232,15 @@ mod test {
22322232
// SAFETY: Raw data format in shared memory: RequestResponseRawPair || output
22332233
output: unsafe { slice::from_raw_parts_mut(output_start, OUTPUT_SIZE) },
22342234
};
2235-
let request_raw = request.into();
2235+
let request_raw: RequestRaw = request.into();
22362236

22372237
// Invalidate enum tag of raw request
2238-
// SAFETY: Raw data format of RequestResponseRawPair in shared memory: RequestRaw || ResponseRaw
2238+
// SAFETY: Populating RequestRaw member of RequestResponseRawPair and modifying its tag
22392239
unsafe {
2240-
core::ptr::copy(&request_raw, request_response_start as *mut RequestRaw, 1);
2241-
let tag: *mut u8 = request_response_start.add(offset_of!(RequestRaw, data));
2240+
let pair_request_raw: *mut u8 =
2241+
request_response_start.add(offset_of!(RequestResponseRawPair, request));
2242+
*(pair_request_raw as *mut RequestRaw) = request_raw;
2243+
let tag: *mut u8 = pair_request_raw.add(offset_of!(RequestRaw, data));
22422244
const INVALID_TAG: u8 = 0xFF;
22432245
*tag = INVALID_TAG;
22442246
}

0 commit comments

Comments
 (0)