(
&mut self,
ile: &InitListExpr,
call: &Node,
call_name: &str,
n_call: usize,
arg_pos: usize,
constraint: &Option<Constraint>,
)
| 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 { |
no test coverage detected