Skip to content

Commit

Permalink
Fix some unsoundness issues (#541)
Browse files Browse the repository at this point in the history
  • Loading branch information
liamwhite authored Aug 16, 2023
1 parent 2f3ced5 commit 696e28c
Show file tree
Hide file tree
Showing 2 changed files with 13 additions and 5 deletions.
4 changes: 2 additions & 2 deletions src/replacement/extensions.rs
Original file line number Diff line number Diff line change
Expand Up @@ -451,8 +451,8 @@ impl LoadedArcEx for LoadedArc {

// Calculate extra folders and set extra folder header for FolderOffsets
let extra_folder_count =
(folder_offsets_vec_len as u32) - (header.folder_offset_count_1 + header.folder_offset_count_2 + header.extra_folder);
header.extra_folder += extra_folder_count as u32;
(folder_offsets_vec_len as u32).wrapping_sub(header.folder_offset_count_1 + header.folder_offset_count_2 + header.extra_folder);
header.extra_folder = header.extra_folder.wrapping_add(extra_folder_count as u32);
self.folder_offsets = folder_offsets_vec;
// --------------------- END MODIFY DIRECTORY RELEATED FIELDS ---------------------

Expand Down
14 changes: 11 additions & 3 deletions src/resource/containers.rs
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
use std::{
alloc::Layout,
ops::{Index, IndexMut, Range},
ptr::null,
ptr::{NonNull, null},
};

#[derive(Debug)]
Expand Down Expand Up @@ -95,14 +95,22 @@ impl<T> CppVector<T> {
pub fn as_slice(&self) -> &[T] {
unsafe {
let len = self.end.offset_from(self.start) as usize;
std::slice::from_raw_parts(self.start, len)
if len > 0 {
std::slice::from_raw_parts(self.start, len)
} else {
std::slice::from_raw_parts(NonNull::<T>::dangling().as_ptr(), len)
}
}
}

pub fn as_mut_slice(&mut self) -> &mut [T] {
unsafe {
let len = self.end.offset_from(self.start) as usize;
std::slice::from_raw_parts_mut(self.start, len)
if len > 0 {
std::slice::from_raw_parts_mut(self.start, len)
} else {
std::slice::from_raw_parts_mut(NonNull::<T>::dangling().as_ptr(), len)
}
}
}

Expand Down

0 comments on commit 696e28c

Please sign in to comment.