diff options
| author | Rubens Brandao <git@rubens.io> | 2024-05-27 10:24:28 -0300 |
|---|---|---|
| committer | Kyle Martin <krm504@nyu.edu> | 2024-05-28 19:06:10 -0400 |
| commit | b3cc03be361d5c6253141e729b096e87e025490f (patch) | |
| tree | 8f89f295033a085a5e86a992b58694cd76a5e3fc /rust/src/hlil | |
| parent | fce26815b400b5d3c0b67a46085ba8c9a61c1457 (diff) | |
fix multiple memory leaks related to CStr/BnString
Diffstat (limited to 'rust/src/hlil')
| -rw-r--r-- | rust/src/hlil/instruction.rs | 9 | ||||
| -rw-r--r-- | rust/src/hlil/lift.rs | 8 | ||||
| -rw-r--r-- | rust/src/hlil/operation.rs | 14 |
3 files changed, 16 insertions, 15 deletions
diff --git a/rust/src/hlil/instruction.rs b/rust/src/hlil/instruction.rs index 1ab9ce4d..6b27284d 100644 --- a/rust/src/hlil/instruction.rs +++ b/rust/src/hlil/instruction.rs @@ -1,11 +1,10 @@ use binaryninjacore_sys::BNGetHighLevelILByIndex; use binaryninjacore_sys::BNHighLevelILOperation; +use crate::architecture::CoreIntrinsic; use crate::operand_iter::OperandIter; use crate::rc::Ref; -use crate::types::{ - ConstantData, ILIntrinsic, RegisterValue, RegisterValueType, SSAVariable, Variable, -}; +use crate::types::{ConstantData, RegisterValue, RegisterValueType, SSAVariable, Variable}; use super::operation::*; use super::{HighLevelILFunction, HighLevelILLiftedInstruction, HighLevelILLiftedInstructionKind}; @@ -812,11 +811,11 @@ impl HighLevelILInstruction { cond_false: self.lift_operand(op.cond_false), }), Intrinsic(op) => Lifted::Intrinsic(LiftedIntrinsic { - intrinsic: ILIntrinsic::new(self.function.get_function().arch(), op.intrinsic), + intrinsic: CoreIntrinsic(self.function.get_function().arch().0, op.intrinsic), params: self.lift_instruction_list(op.first_param, op.num_params), }), IntrinsicSsa(op) => Lifted::IntrinsicSsa(LiftedIntrinsicSsa { - intrinsic: ILIntrinsic::new(self.function.get_function().arch(), op.intrinsic), + intrinsic: CoreIntrinsic(self.function.get_function().arch().0, op.intrinsic), params: self.lift_instruction_list(op.first_param, op.num_params), dest_memory: op.dest_memory, src_memory: op.src_memory, diff --git a/rust/src/hlil/lift.rs b/rust/src/hlil/lift.rs index 731a785c..300a7f1f 100644 --- a/rust/src/hlil/lift.rs +++ b/rust/src/hlil/lift.rs @@ -1,7 +1,9 @@ -use super::{operation::*, HighLevelILFunction}; +use super::operation::*; +use super::HighLevelILFunction; +use crate::architecture::CoreIntrinsic; use crate::rc::Ref; -use crate::types::{ConstantData, ILIntrinsic, SSAVariable, Variable}; +use crate::types::{ConstantData, SSAVariable, Variable}; #[derive(Clone)] pub enum HighLevelILLiftedOperand { @@ -11,7 +13,7 @@ pub enum HighLevelILLiftedOperand { Float(f64), Int(u64), IntList(Vec<u64>), - Intrinsic(ILIntrinsic), + Intrinsic(CoreIntrinsic), Label(GotoLabel), MemberIndex(Option<usize>), Var(Variable), diff --git a/rust/src/hlil/operation.rs b/rust/src/hlil/operation.rs index ee0d437b..e762a74b 100644 --- a/rust/src/hlil/operation.rs +++ b/rust/src/hlil/operation.rs @@ -1,8 +1,10 @@ use binaryninjacore_sys::BNGetGotoLabelName; +use crate::architecture::CoreIntrinsic; use crate::function::Function; use crate::rc::Ref; -use crate::types::{ConstantData, ILIntrinsic, SSAVariable, Variable}; +use crate::string::BnString; +use crate::types::{ConstantData, SSAVariable, Variable}; use super::HighLevelILLiftedInstruction; @@ -13,10 +15,8 @@ pub struct GotoLabel { } impl GotoLabel { - pub fn name(&self) -> &str { - let raw_str = unsafe { BNGetGotoLabelName(self.function.handle, self.target) }; - let c_str = unsafe { core::ffi::CStr::from_ptr(raw_str) }; - c_str.to_str().unwrap() + pub fn name(&self) -> BnString { + unsafe { BnString::from_raw(BNGetGotoLabelName(self.function.handle, self.target)) } } } @@ -320,7 +320,7 @@ pub struct Intrinsic { } #[derive(Clone, Debug, PartialEq)] pub struct LiftedIntrinsic { - pub intrinsic: ILIntrinsic, + pub intrinsic: CoreIntrinsic, pub params: Vec<HighLevelILLiftedInstruction>, } @@ -335,7 +335,7 @@ pub struct IntrinsicSsa { } #[derive(Clone, Debug, PartialEq)] pub struct LiftedIntrinsicSsa { - pub intrinsic: ILIntrinsic, + pub intrinsic: CoreIntrinsic, pub params: Vec<HighLevelILLiftedInstruction>, pub dest_memory: u64, pub src_memory: u64, |
