From 80d5547e14ca9ac0c6d6288957a454ef478bf702 Mon Sep 17 00:00:00 2001 From: Rusty Wagner Date: Fri, 21 Oct 2022 22:24:48 -0600 Subject: Fix ASAN crash on PDB load --- rust/src/callingconvention.rs | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) (limited to 'rust/src') 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 CallingConvention { int_arg_registers: Option>, ) -> Vec { let mut bn_params: Vec = 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 ¶meter.location { Some(location) => location.into_raw(), None => unsafe { mem::zeroed() }, @@ -496,6 +499,9 @@ impl CallingConvention { } }; + // 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 { -- cgit v1.3.1