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

Function parse_func_gadgets_from_ast

src/program/gadget.rs:390–425  ·  view source on GitHub ↗
(ast: &Node, deopt: &Deopt)

Source from the content-addressed store, hash-verified

388 }
389
390 fn parse_func_gadgets_from_ast(ast: &Node, deopt: &Deopt) -> Result<Vec<FuncGadget>> {
391 let mut gadgets = Vec::new();
392 for child in ast.inner.iter() {
393 if let Clang::LinkageSpecDecl(_) = &child.kind {
394 gadgets.extend(parse_func_gadgets_from_ast(child, deopt)?);
395 }
396 if let Clang::FunctionDecl(fd) = &child.kind {
397 let name = fd.get_name();
398 log::trace!("parse gadget: {name}");
399 if let Some(ban) = &deopt.config.ban {
400 if ban.contains(&name) {
401 continue;
402 }
403 }
404 let params = fd.get_params(child);
405 let alias_ret_type = fd.get_ret_type();
406 let ret_type = to_gadget_type(&alias_ret_type)?;
407 let mut idents = vec![];
408 let mut alias_types = vec![];
409 let mut types = vec![];
410
411 for param in params {
412 let ident = param.get_name_as_string();
413 let alias_type = param.get_sized_ty_name(deopt);
414 let ty = to_gadget_type(&alias_type)?;
415 idents.push(ident);
416 alias_types.push(alias_type);
417 types.push(ty);
418 }
419 let gadget =
420 FuncGadget::new(name, idents, types, alias_types, ret_type, alias_ret_type);
421 gadgets.push(gadget);
422 }
423 }
424 Ok(gadgets)
425 }
426
427 pub fn dump_func_gadgets(gadgets: &Vec<FuncGadget>, deopt: &Deopt) -> Result<()> {
428 let save_path = deopt.get_library_func_gadget_path()?;

Callers 1

parse_func_gadgetsFunction · 0.85

Calls 7

to_gadget_typeFunction · 0.85
get_paramsMethod · 0.80
get_ret_typeMethod · 0.80
get_name_as_stringMethod · 0.80
get_sized_ty_nameMethod · 0.80
get_nameMethod · 0.45
pushMethod · 0.45

Tested by

no test coverage detected