From cf7e0c7a6e3c97c87c7cbf496054695471fd82c3 Mon Sep 17 00:00:00 2001 From: molpopgen Date: Thu, 24 Mar 2022 13:21:45 -0700 Subject: [PATCH] Fix several "pedantic" lints from clippy: * Fix pedantic lints related to panics * Fix lints due to possible integer wraparound issues * Use safter pointer casts --- src/error.rs | 5 +++++ src/metadata.rs | 9 ++++++--- src/node_table.rs | 2 +- src/table_collection.rs | 31 +++++++++++++++++++------------ src/trees.rs | 38 +++++++++++++++++++++++++++++--------- 5 files changed, 60 insertions(+), 25 deletions(-) diff --git a/src/error.rs b/src/error.rs index 603c26bb4..3e57ae04f 100644 --- a/src/error.rs +++ b/src/error.rs @@ -81,6 +81,11 @@ pub fn panic_on_tskit_error(code: i32) { /// let x = tskit::error::get_tskit_error_message(-207); /// assert_eq!(x, "Individual out of bounds"); /// ``` +/// +/// # Panics +/// +/// This function must allocate a C string, which may panic +/// if the system runs out of memory. pub fn get_tskit_error_message(code: i32) -> String { let c_str = unsafe { std::ffi::CStr::from_ptr(crate::bindings::tsk_strerror(code)) }; c_str.to_str().unwrap().to_owned() diff --git a/src/metadata.rs b/src/metadata.rs index 5843164ef..9d1f14dac 100644 --- a/src/metadata.rs +++ b/src/metadata.rs @@ -164,7 +164,7 @@ //! into `Python` via the `tskit` `Python API`. use crate::bindings::{tsk_id_t, tsk_size_t}; -use crate::SizeType; +use crate::{SizeType, TskitError}; use thiserror::Error; #[cfg(feature = "derive")] @@ -230,7 +230,7 @@ impl EncodedMetadata { if self.encoded.is_empty() { std::ptr::null() } else { - self.encoded.as_ptr() as *const libc::c_char + self.encoded.as_ptr().cast::() } } @@ -277,7 +277,10 @@ pub(crate) fn char_column_to_vector( } let mut buffer = vec![]; for i in start..stop { - buffer.push(unsafe { *column.offset(i as isize) } as u8); + match isize::try_from(i) { + Ok(o) => buffer.push(unsafe { *column.offset(o) } as u8), + Err(_) => return Err(TskitError::RangeError("could not convert value to isize")), + }; } Ok(Some(buffer)) } diff --git a/src/node_table.rs b/src/node_table.rs index 66cbac501..9a54aa730 100644 --- a/src/node_table.rs +++ b/src/node_table.rs @@ -119,7 +119,7 @@ impl<'a> NodeTable<'a> { pub fn time_array_mut(&mut self) -> &mut [Time] { unsafe { std::slice::from_raw_parts_mut( - self.table_.time as *mut Time, + self.table_.time.cast::