From 952d16ca58429d126224662f4f5f496a0535c7ac Mon Sep 17 00:00:00 2001 From: Mason Reed Date: Sat, 26 Oct 2024 20:33:45 -0400 Subject: Fix all low level il function getters leaking in rust --- rust/src/function.rs | 8 ++++---- rust/src/llil/function.rs | 13 ++++++++----- rust/src/workflow.rs | 4 ++-- 3 files changed, 14 insertions(+), 11 deletions(-) (limited to 'rust/src') diff --git a/rust/src/function.rs b/rust/src/function.rs index 0508ca4d..0df9fcf5 100644 --- a/rust/src/function.rs +++ b/rust/src/function.rs @@ -427,7 +427,7 @@ impl Function { return Err(()); } - Ok(llil::RegularFunction::from_raw(self.arch(), llil)) + Ok(llil::RegularFunction::ref_from_raw(self.arch(), llil)) } } @@ -435,7 +435,7 @@ impl Function { &self, ) -> Option>> { let llil = unsafe { BNGetFunctionLowLevelILIfAvailable(self.handle) }; - (!llil.is_null()).then(|| unsafe { llil::RegularFunction::from_raw(self.arch(), llil) }) + (!llil.is_null()).then(|| unsafe { llil::RegularFunction::ref_from_raw(self.arch(), llil) }) } pub fn lifted_il(&self) -> Result>, ()> { @@ -446,13 +446,13 @@ impl Function { return Err(()); } - Ok(llil::LiftedFunction::from_raw(self.arch(), llil)) + Ok(llil::LiftedFunction::ref_from_raw(self.arch(), llil)) } } pub fn lifted_il_if_available(&self) -> Option>> { let llil = unsafe { BNGetFunctionLiftedILIfAvailable(self.handle) }; - (!llil.is_null()).then(|| unsafe { llil::LiftedFunction::from_raw(self.arch(), llil) }) + (!llil.is_null()).then(|| unsafe { llil::LiftedFunction::ref_from_raw(self.arch(), llil) }) } pub fn return_type(&self) -> Conf> { diff --git a/rust/src/llil/function.rs b/rust/src/llil/function.rs index 8f1eac62..abc501e5 100644 --- a/rust/src/llil/function.rs +++ b/rust/src/llil/function.rs @@ -84,10 +84,7 @@ where M: FunctionMutability, F: FunctionForm, { - pub(crate) unsafe fn from_raw( - borrower: A::Handle, - handle: *mut BNLowLevelILFunction, - ) -> Ref { + pub(crate) unsafe fn from_raw(borrower: A::Handle, handle: *mut BNLowLevelILFunction) -> Self { debug_assert!(!handle.is_null()); Self { @@ -97,7 +94,13 @@ where _mutability: PhantomData, _form: PhantomData, } - .to_owned() + } + + pub(crate) unsafe fn ref_from_raw( + borrower: A::Handle, + handle: *mut BNLowLevelILFunction, + ) -> Ref { + Ref::new(Self::from_raw(borrower, handle)) } pub(crate) fn arch(&self) -> &A { diff --git a/rust/src/workflow.rs b/rust/src/workflow.rs index 8409ad70..246571a8 100644 --- a/rust/src/workflow.rs +++ b/rust/src/workflow.rs @@ -52,7 +52,7 @@ impl AnalysisContext { let result = unsafe { BNGetFunctionLiftedIL(func.handle) }; let arch = self.function().arch(); unsafe { - Some(llil::Function::from_raw( + Some(llil::Function::ref_from_raw( arch, NonNull::new(result)?.as_ptr(), )) @@ -73,7 +73,7 @@ impl AnalysisContext { let result = unsafe { BNAnalysisContextGetLowLevelILFunction(self.handle.as_ptr()) }; let arch = self.function().arch(); unsafe { - Some(llil::Function::from_raw( + Some(llil::Function::ref_from_raw( arch, NonNull::new(result)?.as_ptr(), )) -- cgit v1.3.1