summaryrefslogtreecommitdiff
path: root/rust/src
diff options
context:
space:
mode:
authorRusty Wagner <rusty.wagner@gmail.com>2022-10-21 22:24:48 -0600
committerPeter LaFosse <peter@vector35.com>2022-11-10 16:19:13 -0500
commit80d5547e14ca9ac0c6d6288957a454ef478bf702 (patch)
tree592abbc8c7d5b2de528229637ec2ea4541e8b75a /rust/src
parent5cb0dc3d392327245aaf2a0c79c2aead49ae2d02 (diff)
Fix ASAN crash on PDB load
Diffstat (limited to 'rust/src')
-rw-r--r--rust/src/callingconvention.rs8
1 files changed, 7 insertions, 1 deletions
diff --git a/rust/src/callingconvention.rs b/rust/src/callingconvention.rs
index a8deadef..c1ac22ec 100644
--- a/rust/src/callingconvention.rs
+++ b/rust/src/callingconvention.rs
@@ -452,9 +452,12 @@ impl<A: Architecture> CallingConvention<A> {
int_arg_registers: Option<Vec<A::Register>>,
) -> Vec<Variable> {
let mut bn_params: Vec<BNFunctionParameter> = vec![];
+ let mut name_strings = vec![];
for parameter in params.iter() {
- let raw_name = parameter.name.clone().into_bytes_with_nul();
+ name_strings.push(parameter.name.clone().into_bytes_with_nul());
+ }
+ for (parameter, raw_name) in params.iter().zip(name_strings.iter_mut()) {
let location = match &parameter.location {
Some(location) => location.into_raw(),
None => unsafe { mem::zeroed() },
@@ -496,6 +499,9 @@ impl<A: Architecture> CallingConvention<A> {
}
};
+ // Gotta keep this around so the pointers are valid during the call
+ drop(name_strings);
+
let vars_slice = unsafe { slice::from_raw_parts(vars, count) };
let mut result = vec![];
for var in vars_slice {