feat: null-ptr fix

This commit is contained in:
DecDuck 2026-03-01 22:18:22 +11:00
parent b6d5273576
commit 279fd5f727
No known key found for this signature in database
GPG key ID: 3999E3EFEC9EEB74
2 changed files with 11 additions and 5 deletions

View file

@ -42,14 +42,14 @@ impl fmt::Display for ArchiveError {
}
}
impl<'a> From<&'a archive::Handle> for ArchiveError {
fn from(handle: &'a archive::Handle) -> ArchiveError {
impl<'a> From<&'a dyn archive::Handle> for ArchiveError {
fn from(handle: &'a dyn archive::Handle) -> ArchiveError {
ArchiveError::Sys(handle.err_code(), handle.err_msg())
}
}
impl<'a> From<&'a archive::Handle> for ArchiveResult<()> {
fn from(handle: &'a archive::Handle) -> ArchiveResult<()> {
impl<'a> From<&'a dyn archive::Handle> for ArchiveResult<()> {
fn from(handle: &'a dyn archive::Handle) -> ArchiveResult<()> {
match handle.err_code() {
ErrCode(0) => Ok(()),
_ => Err(ArchiveError::from(handle)),

View file

@ -57,7 +57,13 @@ pub trait Reader: Handle {
unsafe {
match ffi::archive_read_data_block(self.handle(), &mut buff, &mut size, &mut offset) {
ffi::ARCHIVE_EOF => Ok(None),
ffi::ARCHIVE_OK => Ok(Some(slice::from_raw_parts(buff as *const u8, size))),
ffi::ARCHIVE_OK => {
if buff != ptr::null() {
Ok(Some(slice::from_raw_parts(buff as *const u8, size)))
} else {
return self.read_block();
}
}
_ => Err(ArchiveError::Sys(self.err_code(), self.err_msg())),
}
}