diff --git a/src/lib.rs b/src/lib.rs index 6c99f1f..e88a67f 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -140,10 +140,14 @@ impl<'a> From<&'a str> for MownStr<'a> { } impl<'a> From> for MownStr<'a> { - fn from(other: Box) -> MownStr<'a> { + fn from(mut other: Box) -> MownStr<'a> { let len = other.len(); assert!(len <= LEN_MASK); - let addr = NonNull::from(&other.as_bytes()[0]); + let addr = other.as_mut_ptr(); + let addr = unsafe { + // SAFETY: ptr can not be null, + NonNull::new_unchecked(addr) + }; std::mem::forget(other); @@ -502,6 +506,12 @@ mod test { assert!(increase < 3.5); } + #[test] + fn empty_string() { + let empty = "".to_string(); + let _ = MownStr::from(empty); + } + const CAP: usize = 100_000_000; fn get_vmsize() -> usize {