Skip to content

Commit 79e2268

Browse files
committed
mark internal fns unsafe, which is correct b/c length cannot be validated inside
1 parent cc97621 commit 79e2268

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
@@ -189,22 +189,28 @@ pub fn tsk_ragged_column_access<
189189
.map(|(p, n)| unsafe { std::slice::from_raw_parts(p.cast::<O>(), n) })
190190
}
191191

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

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

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

0 commit comments

Comments
 (0)