build the graph with a sequence of taint data.
(&mut self, sym_data_seq: &mut TaintDataVec)
| 799 | |
| 800 | /// build the graph with a sequence of taint data. |
| 801 | fn build_from_seq(&mut self, sym_data_seq: &mut TaintDataVec) -> Result<()> { |
| 802 | log::trace!("build ADG from seq: {sym_data_seq:?}"); |
| 803 | loop { |
| 804 | if let Some((merge_idx, subseq)) = self.find_minimal_subseq(sym_data_seq) { |
| 805 | let previous = Self::get_merge_previous_data(sym_data_seq.as_slice(), merge_idx); |
| 806 | let subsequent = Self::get_join_subsequent_data(sym_data_seq, merge_idx); |
| 807 | self.build_from_subseq(subseq, previous, subsequent)?; |
| 808 | } else { |
| 809 | let seq = Vec::from_iter(sym_data_seq.iter()); |
| 810 | self.build_from_single_path_subseq(seq, &None, &None)?; |
| 811 | break; |
| 812 | } |
| 813 | } |
| 814 | Ok(()) |
| 815 | } |
| 816 | |
| 817 | /// Build the ADG from the analysis result of DFA. The input result is evaluated symbols and their taint data during DFA. |
| 818 | pub fn build_from_analysis_result(&mut self, mut result: Storage<TaintDataVec>) -> Result<()> { |
no test coverage detected