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

Method _create_unlimit_call_fuzzer_var

src/program/transform.rs:528–584  ·  view source on GitHub ↗
(
        &mut self,
        arg_ty: &str,
        arg: &Node,
        visitor: &Visitor,
    )

Source from the content-addressed store, hash-verified

526 }
527
528 fn _create_unlimit_call_fuzzer_var(
529 &mut self,
530 arg_ty: &str,
531 arg: &Node,
532 visitor: &Visitor,
533 ) -> Result<()> {
534 let arg = arg.ignore_parenexpr();
535 if is_fuzzable_array_ty(arg_ty) {
536 if let Clang::StringLiteral(sl) = &arg.kind {
537 let value = sl.get_eval_value();
538 let ty = get_pointer_inner(arg_ty).expect("array ty should not faild");
539 self.create_string_fuzzer_var(value, ty)?;
540 } else if let Clang::InitListExpr(ile) = &arg.kind {
541 if !ile.is_mutable_list(arg) {
542 return Ok(());
543 }
544 if is_sized_array_ty(arg_ty) {
545 self.create_list_fuzzer_var(ile, arg)?;
546 } else {
547 self.create_unlimit_list_fuzzer_var(ile, arg)?;
548 }
549 }
550 }
551
552 if is_integer_ty(arg_ty) {
553 if let Clang::IntegerLiteral(il) = &arg.kind {
554 self.create_integer_fuzzer_var(il, arg_ty)?;
555 return Ok(());
556 } else if let Clang::EnumConstantDecl(ecd) = &arg.kind {
557 if let Some(value) = ecd.get_const_value(arg) {
558 self.fuzzer_shim.append_integer_var(value);
559 return Ok(());
560 }
561 } else if let Clang::UnaryOperator(uo) = &arg.kind {
562 // negative value
563 if !uo.is_minus() || arg.inner.len() != 1 {
564 return Ok(());
565 }
566 if let Clang::IntegerLiteral(il) = &arg.inner[0].kind {
567 let mut il = il.clone();
568 if !is_unsigned_integer_ty(arg_ty) {
569 let mut value = il.value.to_string();
570 value.insert(0, '-');
571 il.value = value.into();
572 }
573 self.create_integer_fuzzer_var(&il, arg_ty)?;
574 }
575 return Ok(());
576 }
577 }
578 if let Clang::DeclRefExpr(dre) = &arg.kind {
579 if let Some(init) = dre.get_var_init(visitor) {
580 self._create_unlimit_call_fuzzer_var(arg_ty, init, visitor)?;
581 }
582 }
583 Ok(())
584 }
585

Callers 1

Calls 15

is_fuzzable_array_tyFunction · 0.85
get_pointer_innerFunction · 0.85
is_sized_array_tyFunction · 0.85
is_integer_tyFunction · 0.85
is_unsigned_integer_tyFunction · 0.85
ignore_parenexprMethod · 0.80
get_eval_valueMethod · 0.80
is_mutable_listMethod · 0.80

Tested by

no test coverage detected