MCPcopy Create free account
hub / github.com/FuzzAnything/PromptFuzz / find_minimal_subseq

Method find_minimal_subseq

src/analysis/adg.rs:673–693  ·  view source on GitHub ↗

the minimal subseq in symbol data that begin with [Merge] token and ends with [Join] token. A merge_idx is additional returned, which is the previous one token before the [Merge] token. Return: Option<(merge_idx, subseq)>

(&self, sym_data: &mut TaintDataVec)

Source from the content-addressed store, hash-verified

671 /// A merge_idx is additional returned, which is the previous one token before the [Merge] token.
672 /// Return: Option<(merge_idx, subseq)>
673 fn find_minimal_subseq(&self, sym_data: &mut TaintDataVec) -> Option<(usize, Vec<TaintData>)> {
674 let merge_idx = find_last_merge_idx(sym_data);
675 let join_idx = find_first_join_idx(sym_data, merge_idx);
676 if merge_idx.is_none() && join_idx.is_none() {
677 return None;
678 } else if merge_idx.is_none() || join_idx.is_none() {
679 unreachable!("The [Merge] and [Join] in symbol data must be paired: {sym_data:?}")
680 }
681 let merge_idx = merge_idx.unwrap();
682 let join_idx = join_idx.unwrap();
683 let is_next_sep = if sym_data.len() > join_idx + 1 {
684 sym_data[join_idx + 1].is_seq()
685 } else {
686 false
687 };
688 let subtree: Vec<TaintData> = sym_data.drain(merge_idx..join_idx + 1).collect();
689 if is_next_sep {
690 sym_data.insert(merge_idx, TaintData::new_holder());
691 }
692 Some((merge_idx, subtree))
693 }
694
695 /// return the previous one data before the [Merge] token.
696 fn get_merge_previous_data(sym_data: &[TaintData], merge_idx: usize) -> Option<&TaintData> {

Callers 1

build_from_seqMethod · 0.80

Calls 4

find_last_merge_idxFunction · 0.85
find_first_join_idxFunction · 0.85
is_noneMethod · 0.80
is_seqMethod · 0.80

Tested by

no test coverage detected