Borrow value instead of moving in FsPath::from()

When accepting a value of AsRef<Utf8CStr> in FsPath::from(), the
existing code will move a value of Utf8CStrBufArr, creating a reference
that lives longer than the borrowing value, causing undefined behavior.

The issue is only visible on release builds, as more advanced
optimizations will be more aggressive re-using the stack of variables
that no longer lives.

Fix #7408
This commit is contained in:
topjohnwu
2023-10-11 23:48:54 -07:00
parent 587b6cfd41
commit eda8c70a80
2 changed files with 4 additions and 4 deletions

View File

@@ -385,12 +385,12 @@ pub struct FsPath(Utf8CStr);
impl FsPath {
#[inline(always)]
pub fn from<'a, T: AsRef<Utf8CStr>>(value: T) -> &'a FsPath {
pub fn from<T: AsRef<Utf8CStr> + ?Sized>(value: &T) -> &FsPath {
unsafe { mem::transmute(value.as_ref()) }
}
#[inline(always)]
pub fn from_mut<'a, T: AsMut<Utf8CStr>>(mut value: T) -> &'a mut FsPath {
pub fn from_mut<T: AsMut<Utf8CStr> + ?Sized>(value: &mut T) -> &mut FsPath {
unsafe { mem::transmute(value.as_mut()) }
}
}