Skip to content

Commit 2a6d936

Browse files
Access slice in safe way
1 parent 6755a19 commit 2a6d936

File tree

1 file changed

+11
-9
lines changed

1 file changed

+11
-9
lines changed

cminesweeper/src/lib.rs

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -334,13 +334,20 @@ mod test {
334334
}
335335

336336
struct BufferedData<S, B> {
337-
#[allow(dead_code)]
338337
buffer: Vec<B>,
339338
data: S,
340339
}
341340

342341
fn create_open_info_with_size(size: usize) -> BufferedData<COpenInfo, COpenedField> {
343342
let mut buffer = Vec::with_capacity(size);
343+
buffer.resize(
344+
size,
345+
COpenedField {
346+
row: GameSizeType::max_value(),
347+
column: GameSizeType::max_value(),
348+
field_type: FieldType::Mine,
349+
},
350+
);
344351
let newly_opened_fields_ptr = buffer.as_mut_ptr();
345352
let newly_opened_fields_max_length =
346353
ArraySizeType::try_from(size).expect("Size conversion failed");
@@ -533,15 +540,10 @@ mod test {
533540
assert!(buffered_open_info.data.newly_opened_fields_length > 0);
534541
assert_eq!(CError::Ok, buffered_error_info.data.error_code);
535542

536-
let newly_opened_fields_size =
543+
let newly_opened_fields_length =
537544
usize::try_from(buffered_open_info.data.newly_opened_fields_length).unwrap();
538-
let slice = unsafe {
539-
std::slice::from_raw_parts(
540-
buffered_open_info.data.newly_opened_fields_ptr,
541-
newly_opened_fields_size,
542-
)
543-
};
544-
for newly_opened_field in slice.iter() {
545+
546+
for newly_opened_field in buffered_open_info.buffer[0..newly_opened_fields_length].iter() {
545547
assert_ne!(FieldType::Mine, newly_opened_field.field_type);
546548
assert!(height >= newly_opened_field.row);
547549
assert!(width >= newly_opened_field.column);

0 commit comments

Comments
 (0)