diff --git a/src/cwe_checker_lib/src/analysis/function_signature/context/mod.rs b/src/cwe_checker_lib/src/analysis/function_signature/context/mod.rs index f562d3fde..80cdfea6f 100644 --- a/src/cwe_checker_lib/src/analysis/function_signature/context/mod.rs +++ b/src/cwe_checker_lib/src/analysis/function_signature/context/mod.rs @@ -373,6 +373,7 @@ impl<'a> forward_interprocedural_fixpoint::Context<'a> for Context<'a> { let value = new_state .substitute_global_mem_address(value, &self.project.runtime_memory_image); new_state.track_contained_ids(&value); + new_state.set_read_flag_for_contained_ids(&value); new_state.set_register(var, value); } Def::Store { address, value } => { diff --git a/src/cwe_checker_lib/src/analysis/function_signature/state/mod.rs b/src/cwe_checker_lib/src/analysis/function_signature/state/mod.rs index d159e2ff3..e54d4d6ed 100644 --- a/src/cwe_checker_lib/src/analysis/function_signature/state/mod.rs +++ b/src/cwe_checker_lib/src/analysis/function_signature/state/mod.rs @@ -286,6 +286,15 @@ impl State { } } + /// Set the read flag for every tracked ID contained in the given value. + pub fn set_read_flag_for_contained_ids(&mut self, value: &DataDomain) { + for id in value.referenced_ids() { + if let Some(object) = self.tracked_ids.get_mut(id) { + object.set_read_flag(); + } + } + } + /// Set the read and dereferenced flag for every tracked ID contained in the given value. pub fn set_deref_flag_for_contained_ids(&mut self, value: &DataDomain) { for id in value.referenced_ids() {