@@ -2137,6 +2137,7 @@ mod test {
2137
2137
} ;
2138
2138
let request_raw: RequestRaw = request. into ( ) ;
2139
2139
let request_raw_ptr = & request_raw as * const RequestRaw as * const u8 ;
2140
+ // SAFETY: Raw data format of RequestResponseRawPair in : RequestRaw || ResponseRaw
2140
2141
let reconstructed_request_raw = unsafe { RequestRaw :: from_raw ( request_raw_ptr) }
2141
2142
. expect ( "failed to create raw request from pointer." ) ;
2142
2143
let always_valid = |_data : * const u8 , _size : u32 | true ;
@@ -2167,22 +2168,31 @@ mod test {
2167
2168
const OUTPUT_SIZE : usize = 16 ;
2168
2169
let mut shared_memory = [ 0u8 ; size_of :: < RequestRaw > ( ) + OUTPUT_SIZE ] ;
2169
2170
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
+ } ;
2171
2177
let request = GetRandom {
2172
2178
client_id,
2173
2179
request_id,
2180
+ // SAFETY: Raw data format in shared memory: RequestResponseRawPair || output
2174
2181
output : unsafe { slice:: from_raw_parts_mut ( output_start, OUTPUT_SIZE ) } ,
2175
2182
} ;
2176
2183
let request_raw = request. into ( ) ;
2177
2184
let mut request_response_pair =
2185
+ // SAFETY: Raw data format in shared memory: RequestResponseRawPair || output
2178
2186
unsafe { RequestResponseRawPair :: from_raw ( request_response_start) }
2179
2187
. expect ( "failed to create request-response pair from pointer." ) ;
2180
2188
request_response_pair. request = request_raw;
2181
2189
2182
2190
let is_in_shared_memory_1st_half = |data : * const u8 , size : u32 | {
2183
2191
let start_data = data;
2192
+ // SAFETY: Raw pointer is trusted in unit tests
2184
2193
let end_data = unsafe { start_data. add ( size as usize ) } ;
2185
2194
let start_shared_memory = shared_memory. as_ptr ( ) ;
2195
+ // SAFETY: Calculation to determine first half of raw memory region
2186
2196
let end_shared_memory_1st_half =
2187
2197
unsafe { start_shared_memory. add ( shared_memory. len ( ) / 2 ) } ;
2188
2198
start_shared_memory <= start_data && end_data <= end_shared_memory_1st_half
@@ -2210,22 +2220,30 @@ mod test {
2210
2220
const OUTPUT_SIZE : usize = 16 ;
2211
2221
let mut shared_memory = [ 0u8 ; size_of :: < RequestRaw > ( ) + OUTPUT_SIZE ] ;
2212
2222
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
+ } ;
2214
2229
let request = GetRandom {
2215
2230
client_id,
2216
2231
request_id,
2232
+ // SAFETY: Raw data format in shared memory: RequestResponseRawPair || output
2217
2233
output : unsafe { slice:: from_raw_parts_mut ( output_start, OUTPUT_SIZE ) } ,
2218
2234
} ;
2219
2235
let request_raw = request. into ( ) ;
2220
2236
2221
2237
// Invalidate enum tag of raw request
2238
+ // SAFETY: Raw data format of RequestResponseRawPair in shared memory: RequestRaw || ResponseRaw
2222
2239
unsafe {
2223
2240
core:: ptr:: copy ( & request_raw, request_response_start as * mut RequestRaw , 1 ) ;
2224
2241
let tag: * mut u8 = request_response_start. add ( offset_of ! ( RequestRaw , data) ) ;
2225
2242
const INVALID_TAG : u8 = 0xFF ;
2226
2243
* tag = INVALID_TAG ;
2227
2244
}
2228
2245
2246
+ // SAFETY: Testing errors in conversion from raw memory to RequestResponseRawPair
2229
2247
match unsafe { RequestResponseRawPair :: from_raw ( request_response_start) } {
2230
2248
Ok ( _) => {
2231
2249
panic ! ( "Expected request raw reconstruction to fail" )
0 commit comments