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

Method makeup_call_list_arg

src/program/transform.rs:713–798  ·  view source on GitHub ↗
(
        &mut self,
        ile: &InitListExpr,
        call: &Node,
        call_name: &str,
        n_call: usize,
        arg_pos: usize,
        constraint: &Option<Constraint>,
    )

Source from the content-addressed store, hash-verified

711 }
712
713 fn makeup_call_list_arg(
714 &mut self,
715 ile: &InitListExpr,
716 call: &Node,
717 call_name: &str,
718 n_call: usize,
719 arg_pos: usize,
720 constraint: &Option<Constraint>,
721 ) -> Result<()> {
722 // format the declaration name and type of this array var.
723 let array_var_name = format!("fuzzer_var_{call_name}_{n_call}_{arg_pos}");
724 let array_decl_type = get_call_arg_type(call, arg_pos);
725 let mut array_decl_name: String = format!("{array_decl_type} {array_var_name}");
726
727 // current, only handle constraint for the single layer poitner.
728 let constraint = if get_func_gadget(call_name)
729 .unwrap()
730 .is_signle_layer_pointer(arg_pos)
731 {
732 constraint
733 } else {
734 let decl_type = ile.get_decl_name(&array_var_name);
735 array_decl_name = decl_type;
736 if !array_decl_name.starts_with("const") {
737 array_decl_name.insert_str(0, "const ");
738 }
739 &None
740 };
741
742 if let Some(constraint) = constraint {
743 match &constraint {
744 Constraint::ArrayLen((array_pos, integer_pos)) => {
745 // format the declaration name and type of this array var.
746 let size_decl_type = get_call_arg_type(call, *integer_pos);
747 let size_decl_name = format!("fuzzer_size_{call_name}_{n_call}_{arg_pos}");
748
749 let size_arg = Some((size_decl_name.as_str(), size_decl_type.as_str(), 0));
750
751 if integer_pos > array_pos {
752 self.change_call_arg(call, *integer_pos, &size_decl_name)?;
753 self.change_call_arg(call, arg_pos, &array_var_name)?;
754 } else {
755 self.change_call_arg(call, arg_pos, &array_var_name)?;
756 self.change_call_arg(call, *integer_pos, &size_decl_name)?;
757 }
758 self.make_unlimit_list_expr_fuzzable(&array_decl_name, ile, size_arg)?;
759 }
760 Constraint::WeakArrayLen((array_pos, integer_pos)) => {
761 // format the declaration name and type of this array var.
762 let size_decl_type = get_call_arg_type(call, *integer_pos);
763 let size_decl_name = format!("fuzzer_size_{call_name}_{n_call}_{arg_pos}");
764
765 let size_arg = Some((size_decl_name.as_str(), size_decl_type.as_str(), 0));
766
767 if integer_pos > array_pos {
768 self.change_call_arg(call, *integer_pos, &size_decl_name)?;
769 self.change_call_arg(call, arg_pos, &array_var_name)?;
770 } else {

Callers 1

Calls 6

get_call_arg_typeFunction · 0.85
get_func_gadgetFunction · 0.85
get_decl_nameMethod · 0.80
change_call_argMethod · 0.80

Tested by

no test coverage detected