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

Method handle_nested_call

src/analysis/fdsan.rs:374–400  ·  view source on GitHub ↗

Transform the nested call into multi-line calls.

(&mut self)

Source from the content-addressed store, hash-verified

372
373 // Transform the nested call into multi-line calls.
374 fn handle_nested_call(&mut self) -> Result<()> {
375 let mut global_id = 0;
376 let mut visitor = self.get_new_visitor()?;
377 let nested_calls = vec!["fuzz_fileno", "open", "fmemopen", "fileno"];
378
379 while let Some((call, arg, nest_name)) = visitor.find_nested_call(&nested_calls) {
380 let ins_loc = get_loc_before_stmt(&self.src_file, &call.range)?;
381 let (arg_begin, arg_end) = get_sr_offset(&arg.range)?;
382 let arg_content = get_source_code_content(&arg.range)?;
383 let (var_name, init_stmt) =
384 if nest_name == "fuzz_fileno" || nest_name == "open" || nest_name == "fileno" {
385 let var_name = format!("fuzz_fd_{global_id}");
386 let init_stmt = format!("\n\tint {var_name} = {arg_content};\n");
387 (var_name, init_stmt)
388 } else {
389 let var_name = format!("fuzz_file_{global_id}");
390 let init_stmt = format!("\n\tFILE* {var_name} = {arg_content};\n");
391 (var_name, init_stmt)
392 };
393 self.seek_and_rewrite(arg_begin, arg_end - arg_begin, &var_name)?;
394 self.seek_and_rewrite(ins_loc, 0, &init_stmt)?;
395 global_id += 1;
396 visitor = self.get_new_visitor()?;
397 }
398
399 Ok(())
400 }
401
402 fn add_sanitize_header(&mut self) -> Result<()> {
403 let header = "#include \"FDSan.h\"\n";

Callers 1

add_fd_sanitizerMethod · 0.80

Calls 6

get_loc_before_stmtFunction · 0.85
get_sr_offsetFunction · 0.85
get_source_code_contentFunction · 0.85
get_new_visitorMethod · 0.80
find_nested_callMethod · 0.80
seek_and_rewriteMethod · 0.80

Tested by

no test coverage detected