mirror of
https://github.com/topjohnwu/Magisk.git
synced 2024-12-22 07:57:39 +00:00
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:
parent
587b6cfd41
commit
eda8c70a80
@ -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()) }
|
||||
}
|
||||
}
|
||||
|
@ -229,13 +229,13 @@ impl DirEntry<'_> {
|
||||
pub fn get_attr(&self) -> io::Result<FileAttr> {
|
||||
let mut path = Utf8CStrBufArr::default();
|
||||
self.path(&mut path)?;
|
||||
FsPath::from(path).get_attr()
|
||||
FsPath::from(&path).get_attr()
|
||||
}
|
||||
|
||||
pub fn set_attr(&self, attr: &FileAttr) -> io::Result<()> {
|
||||
let mut path = Utf8CStrBufArr::default();
|
||||
self.path(&mut path)?;
|
||||
FsPath::from(path).set_attr(attr)
|
||||
FsPath::from(&path).set_attr(attr)
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user