summaryrefslogtreecommitdiff
path: root/rust/src/hlil
diff options
context:
space:
mode:
authorRubens Brandao <git@rubens.io>2024-05-27 10:24:28 -0300
committerKyle Martin <krm504@nyu.edu>2024-05-28 19:06:10 -0400
commitb3cc03be361d5c6253141e729b096e87e025490f (patch)
tree8f89f295033a085a5e86a992b58694cd76a5e3fc /rust/src/hlil
parentfce26815b400b5d3c0b67a46085ba8c9a61c1457 (diff)
fix multiple memory leaks related to CStr/BnString
Diffstat (limited to 'rust/src/hlil')
-rw-r--r--rust/src/hlil/instruction.rs9
-rw-r--r--rust/src/hlil/lift.rs8
-rw-r--r--rust/src/hlil/operation.rs14
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,