Skip to content

Commit e244f9a

Browse files
committed
mark internal fns unsafe, which is correct b/c length cannot be validated inside
1 parent 7c68f28 commit e244f9a

File tree

1 file changed

+14
-8
lines changed

1 file changed

+14
-8
lines changed

src/sys/mod.rs

Lines changed: 14 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -188,22 +188,28 @@ pub fn tsk_ragged_column_access<
188188
.map(|(p, n)| unsafe { std::slice::from_raw_parts(p.cast::<O>(), n) })
189189
}
190190

191-
pub fn generate_slice<'a, L: Into<bindings::tsk_size_t>, I, O>(
191+
/// # SAFETY
192+
///
193+
/// * data must not be NULL
194+
/// * length must be a valid offset from data
195+
/// (ideally it comes from the tskit-c API)
196+
pub unsafe fn generate_slice<'a, L: Into<bindings::tsk_size_t>, I, O>(
192197
data: *const I,
193198
length: L,
194199
) -> &'a [O] {
195-
assert!(!data.is_null());
196-
// SAFETY: pointer is not null, length comes from C API
197-
unsafe { std::slice::from_raw_parts(data.cast::<O>(), length.into() as usize) }
200+
std::slice::from_raw_parts(data.cast::<O>(), length.into() as usize)
198201
}
199202

200-
pub fn generate_slice_mut<'a, L: Into<bindings::tsk_size_t>, I, O>(
203+
/// # SAFETY
204+
///
205+
/// * data must not be NULL
206+
/// * length must be a valid offset from data
207+
/// (ideally it comes from the tskit-c API)
208+
pub unsafe fn generate_slice_mut<'a, L: Into<bindings::tsk_size_t>, I, O>(
201209
data: *mut I,
202210
length: L,
203211
) -> &'a mut [O] {
204-
assert!(!data.is_null());
205-
// SAFETY: pointer is not null, length comes from C API
206-
unsafe { std::slice::from_raw_parts_mut(data.cast::<O>(), length.into() as usize) }
212+
std::slice::from_raw_parts_mut(data.cast::<O>(), length.into() as usize)
207213
}
208214

209215
pub fn get_tskit_error_message(code: i32) -> String {

0 commit comments

Comments
 (0)