feat: null-ptr fix
This commit is contained in:
@@ -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)),
|
||||
|
||||
@@ -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())),
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user