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

Function parse_func_gadgets

src/program/gadget.rs:359–388  ·  view source on GitHub ↗
(deopt: &Deopt)

Source from the content-addressed store, hash-verified

357 use super::*;
358
359 pub fn parse_func_gadgets(deopt: &Deopt) -> Result<Vec<FuncGadget>> {
360 let headers = deopt.obtain_library_include_headers()?;
361 let mut gadgets = Vec::new();
362 for header in headers {
363 if let Some(ext) = header.extension() {
364 if ext != "h" && ext != "hpp" && ext != "hxx" {
365 continue;
366 }
367 }
368 let ast_res = Executor::parse_header_ast(&header, deopt);
369 if let Err(err) = ast_res {
370 log::error!("{}", err.to_string());
371 log::error!("Meet a error during parse header's ast. Some headers are prevent to be included. IF that is the case, please just ignore it.");
372 continue;
373 }
374 let ast = ast_res.unwrap();
375 let header_gadgets: Vec<FuncGadget> = parse_func_gadgets_from_ast(&ast, deopt)?;
376 gadgets.extend(header_gadgets);
377 }
378 let mut visited: HashSet<String> = HashSet::new();
379 gadgets.retain(|x| {
380 if visited.contains(&x.name) {
381 false
382 } else {
383 visited.insert(x.name.clone());
384 true
385 }
386 });
387 Ok(gadgets)
388 }
389
390 fn parse_func_gadgets_from_ast(ast: &Node, deopt: &Deopt) -> Result<Vec<FuncGadget>> {
391 let mut gadgets = Vec::new();

Callers 1

get_func_gadgetsFunction · 0.85

Tested by

no test coverage detected