clippy fixes
This commit is contained in:
parent
0d11a41038
commit
8577d5c6a0
15
clippy.sh
Executable file
15
clippy.sh
Executable file
@ -0,0 +1,15 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
# Clippy checks
|
||||||
|
cargo clean
|
||||||
|
RUST_BACKTRACE=full cargo clippy --all -- \
|
||||||
|
-D clippy::pedantic \
|
||||||
|
-W missing-docs \
|
||||||
|
-W clippy::missing-errors-doc \
|
||||||
|
-W clippy::similar-names \
|
||||||
|
-A clippy::missing-docs-in-private-items \
|
||||||
|
-A clippy::unseparated-literal-suffix \
|
||||||
|
-A clippy::module-name-repetitions \
|
||||||
|
-A clippy::unreadable-literal \
|
||||||
|
-A clippy::if-not-else \
|
||||||
|
#--allow clippy::print-with-newline \
|
||||||
|
#--allow clippy::write-with-newline \
|
@ -1,3 +1,5 @@
|
|||||||
|
//! special handling to build and link libafl
|
||||||
|
|
||||||
fn main() {
|
fn main() {
|
||||||
#[cfg(target_os = "windows")]
|
#[cfg(target_os = "windows")]
|
||||||
windows::build!(
|
windows::build!(
|
||||||
|
@ -1064,6 +1064,7 @@ where
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// Returns the next message, tag, buf, if avaliable, else None
|
/// Returns the next message, tag, buf, if avaliable, else None
|
||||||
|
#[allow(clippy::type_complexity)]
|
||||||
#[inline]
|
#[inline]
|
||||||
pub fn recv_buf(&mut self) -> Result<Option<(u32, u32, &[u8])>, Error> {
|
pub fn recv_buf(&mut self) -> Result<Option<(u32, u32, &[u8])>, Error> {
|
||||||
unsafe {
|
unsafe {
|
||||||
@ -1824,6 +1825,7 @@ where
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// Returns the next message, tag, buf, if avaliable, else None
|
/// Returns the next message, tag, buf, if avaliable, else None
|
||||||
|
#[allow(clippy::type_complexity)]
|
||||||
#[inline]
|
#[inline]
|
||||||
pub fn recv_buf(&mut self) -> Result<Option<(u32, u32, &[u8])>, Error> {
|
pub fn recv_buf(&mut self) -> Result<Option<(u32, u32, &[u8])>, Error> {
|
||||||
self.receiver.recv_buf()
|
self.receiver.recv_buf()
|
||||||
|
@ -24,6 +24,7 @@ pub use libc::{c_void, siginfo_t};
|
|||||||
|
|
||||||
#[derive(IntoPrimitive, TryFromPrimitive, Clone, Copy)]
|
#[derive(IntoPrimitive, TryFromPrimitive, Clone, Copy)]
|
||||||
#[repr(i32)]
|
#[repr(i32)]
|
||||||
|
#[allow(clippy::clippy::pub_enum_variant_names)]
|
||||||
pub enum Signal {
|
pub enum Signal {
|
||||||
SigAbort = SIGABRT,
|
SigAbort = SIGABRT,
|
||||||
SigBus = SIGBUS,
|
SigBus = SIGBUS,
|
||||||
|
@ -356,6 +356,7 @@ pub mod unix_shmem {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// Deinitialize this shmem instance
|
/// Deinitialize this shmem instance
|
||||||
|
#[allow(clippy::clippy::clippy::unnecessary_cast)] // for c_ types
|
||||||
unsafe fn unix_shmem_deinit(shm: *mut UnixShMem) {
|
unsafe fn unix_shmem_deinit(shm: *mut UnixShMem) {
|
||||||
if shm.is_null() || (*shm).map.is_null() {
|
if shm.is_null() || (*shm).map.is_null() {
|
||||||
/* Serialized map id */
|
/* Serialized map id */
|
||||||
@ -369,6 +370,7 @@ pub mod unix_shmem {
|
|||||||
|
|
||||||
/// Functions to create Shared memory region, for observation channels and
|
/// Functions to create Shared memory region, for observation channels and
|
||||||
/// opening inputs and stuff.
|
/// opening inputs and stuff.
|
||||||
|
#[allow(clippy::clippy::clippy::unnecessary_cast)] // for c_ types
|
||||||
unsafe fn unix_shmem_init(shm: *mut UnixShMem, map_size: usize) -> *mut c_uchar {
|
unsafe fn unix_shmem_init(shm: *mut UnixShMem, map_size: usize) -> *mut c_uchar {
|
||||||
(*shm).map_size = map_size;
|
(*shm).map_size = map_size;
|
||||||
(*shm).map = ptr::null_mut();
|
(*shm).map = ptr::null_mut();
|
||||||
@ -394,13 +396,14 @@ pub mod unix_shmem {
|
|||||||
if (*shm).map == -(1 as c_int) as *mut c_void as *mut c_uchar || (*shm).map.is_null() {
|
if (*shm).map == -(1 as c_int) as *mut c_void as *mut c_uchar || (*shm).map.is_null() {
|
||||||
shmctl((*shm).shm_id, 0 as c_int, ptr::null_mut());
|
shmctl((*shm).shm_id, 0 as c_int, ptr::null_mut());
|
||||||
(*shm).shm_id = -(1 as c_int);
|
(*shm).shm_id = -(1 as c_int);
|
||||||
(*shm).shm_str[0 as c_int as usize] = 0u8;
|
(*shm).shm_str[0] = 0u8;
|
||||||
return ptr::null_mut();
|
return ptr::null_mut();
|
||||||
}
|
}
|
||||||
(*shm).map
|
(*shm).map
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Uses a shmap id string to open a shared map
|
/// Uses a shmap id string to open a shared map
|
||||||
|
#[allow(clippy::clippy::unnecessary_cast)] // for c_int and c_long
|
||||||
unsafe fn unix_shmem_by_str(
|
unsafe fn unix_shmem_by_str(
|
||||||
shm: *mut UnixShMem,
|
shm: *mut UnixShMem,
|
||||||
shm_str: &CStr,
|
shm_str: &CStr,
|
||||||
@ -414,7 +417,7 @@ pub mod unix_shmem {
|
|||||||
strncpy(
|
strncpy(
|
||||||
(*shm).shm_str.as_mut_ptr() as *mut c_char,
|
(*shm).shm_str.as_mut_ptr() as *mut c_char,
|
||||||
shm_str.as_ptr() as *const c_char,
|
shm_str.as_ptr() as *const c_char,
|
||||||
(size_of::<[c_char; 20]>() as c_ulong).wrapping_sub(1 as c_int as c_ulong),
|
(size_of::<[c_char; 20]>() as c_ulong).wrapping_sub(1 as c_ulong),
|
||||||
);
|
);
|
||||||
(*shm).shm_id = shm_str
|
(*shm).shm_id = shm_str
|
||||||
.to_str()
|
.to_str()
|
||||||
|
@ -206,6 +206,7 @@ where
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// Handle arriving events in the broker
|
/// Handle arriving events in the broker
|
||||||
|
#[allow(clippy::clippy::unnecessary_wraps)]
|
||||||
fn handle_in_broker(
|
fn handle_in_broker(
|
||||||
stats: &mut ST,
|
stats: &mut ST,
|
||||||
sender_id: u32,
|
sender_id: u32,
|
||||||
@ -398,6 +399,7 @@ where
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// Deserialize the state and corpus tuple, previously serialized with `serialize_state_corpus(...)`
|
/// Deserialize the state and corpus tuple, previously serialized with `serialize_state_corpus(...)`
|
||||||
|
#[allow(clippy::type_complexity)]
|
||||||
pub fn deserialize_state_mgr<I, S, SH, ST>(
|
pub fn deserialize_state_mgr<I, S, SH, ST>(
|
||||||
state_corpus_serialized: &[u8],
|
state_corpus_serialized: &[u8],
|
||||||
) -> Result<(S, LlmpEventManager<I, S, SH, ST>), Error>
|
) -> Result<(S, LlmpEventManager<I, S, SH, ST>), Error>
|
||||||
@ -505,6 +507,7 @@ where
|
|||||||
/// A restarting state is a combination of restarter and runner, that can be used on systems without `fork`.
|
/// A restarting state is a combination of restarter and runner, that can be used on systems without `fork`.
|
||||||
/// The restarter will start a new process each time the child crashes or timeouts.
|
/// The restarter will start a new process each time the child crashes or timeouts.
|
||||||
#[cfg(feature = "std")]
|
#[cfg(feature = "std")]
|
||||||
|
#[allow(clippy::clippy::unnecessary_operation)] // for { mgr = LlmpEventManager... }
|
||||||
pub fn setup_restarting_mgr<I, S, SH, ST>(
|
pub fn setup_restarting_mgr<I, S, SH, ST>(
|
||||||
//mgr: &mut LlmpEventManager<I, S, SH, ST>,
|
//mgr: &mut LlmpEventManager<I, S, SH, ST>,
|
||||||
stats: ST,
|
stats: ST,
|
||||||
@ -534,7 +537,8 @@ where
|
|||||||
println!("Doing broker things. Run this tool again to start fuzzing in a client.");
|
println!("Doing broker things. Run this tool again to start fuzzing in a client.");
|
||||||
mgr.broker_loop()?;
|
mgr.broker_loop()?;
|
||||||
return Err(Error::ShuttingDown);
|
return Err(Error::ShuttingDown);
|
||||||
} else {
|
}
|
||||||
|
|
||||||
// We are the fuzzer respawner in a llmp client
|
// We are the fuzzer respawner in a llmp client
|
||||||
mgr.to_env(_ENV_FUZZER_BROKER_CLIENT_INITIAL);
|
mgr.to_env(_ENV_FUZZER_BROKER_CLIENT_INITIAL);
|
||||||
|
|
||||||
@ -570,7 +574,7 @@ where
|
|||||||
}
|
}
|
||||||
|
|
||||||
ctr = ctr.wrapping_add(1);
|
ctr = ctr.wrapping_add(1);
|
||||||
}
|
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
// We are the newly started fuzzing instance, first, connect to our own restore map.
|
// We are the newly started fuzzing instance, first, connect to our own restore map.
|
||||||
|
@ -73,6 +73,7 @@ where
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Handle arriving events in the broker
|
// Handle arriving events in the broker
|
||||||
|
#[allow(clippy::unnecessary_wraps)]
|
||||||
fn handle_in_broker(stats: &mut ST, event: &Event<I>) -> Result<BrokerEventResult, Error> {
|
fn handle_in_broker(stats: &mut ST, event: &Event<I>) -> Result<BrokerEventResult, Error> {
|
||||||
match event {
|
match event {
|
||||||
Event::NewTestcase {
|
Event::NewTestcase {
|
||||||
|
@ -21,7 +21,7 @@ use crate::{
|
|||||||
pub enum ExitKind {
|
pub enum ExitKind {
|
||||||
Ok,
|
Ok,
|
||||||
Crash,
|
Crash,
|
||||||
OOM,
|
Oom,
|
||||||
Timeout,
|
Timeout,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -93,7 +93,7 @@ where
|
|||||||
/// Generates up to DUMMY_BYTES_MAX non-random dummy bytes (0)
|
/// Generates up to DUMMY_BYTES_MAX non-random dummy bytes (0)
|
||||||
fn generate_dummy(&self) -> BytesInput {
|
fn generate_dummy(&self) -> BytesInput {
|
||||||
let size = min(self.max_size, DUMMY_BYTES_MAX);
|
let size = min(self.max_size, DUMMY_BYTES_MAX);
|
||||||
BytesInput::new(vec![0u8; size])
|
BytesInput::new(vec![0_u8; size])
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -16,10 +16,11 @@ pub struct BytesInput {
|
|||||||
|
|
||||||
impl Input for BytesInput {}
|
impl Input for BytesInput {}
|
||||||
|
|
||||||
|
|
||||||
/// Rc Ref-cell from Input
|
/// Rc Ref-cell from Input
|
||||||
impl Into<Rc<RefCell<Self>>> for BytesInput {
|
impl From<BytesInput> for Rc<RefCell<BytesInput>> {
|
||||||
fn into(self) -> Rc<RefCell<Self>> {
|
fn from(input: BytesInput) -> Self {
|
||||||
Rc::new(RefCell::new(self))
|
Rc::new(RefCell::new(input))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -179,7 +179,7 @@ where
|
|||||||
/// Create a new StdScheduledMutator instance specifying mutations
|
/// Create a new StdScheduledMutator instance specifying mutations
|
||||||
pub fn new(mutations: MT) -> Self {
|
pub fn new(mutations: MT) -> Self {
|
||||||
StdScheduledMutator {
|
StdScheduledMutator {
|
||||||
mutations: mutations,
|
mutations,
|
||||||
phantom: PhantomData,
|
phantom: PhantomData,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -377,7 +377,7 @@ where
|
|||||||
/// Create a new StdScheduledMutator instance without mutations and corpus
|
/// Create a new StdScheduledMutator instance without mutations and corpus
|
||||||
pub fn new(scheduled: SM) -> Self {
|
pub fn new(scheduled: SM) -> Self {
|
||||||
Self {
|
Self {
|
||||||
scheduled: scheduled,
|
scheduled,
|
||||||
mutation_log: vec![],
|
mutation_log: vec![],
|
||||||
phantom: PhantomData,
|
phantom: PhantomData,
|
||||||
}
|
}
|
||||||
|
@ -49,6 +49,7 @@ impl Tokens {
|
|||||||
|
|
||||||
/// Adds a token to a dictionary, checking it is not a duplicate
|
/// Adds a token to a dictionary, checking it is not a duplicate
|
||||||
/// Returns `false` if the token was already present and did not get added.
|
/// Returns `false` if the token was already present and did not get added.
|
||||||
|
#[allow(clippy::clippy::ptr_arg)]
|
||||||
pub fn add_token(&mut self, token: &Vec<u8>) -> bool {
|
pub fn add_token(&mut self, token: &Vec<u8>) -> bool {
|
||||||
if self.token_vec.contains(token) {
|
if self.token_vec.contains(token) {
|
||||||
return false;
|
return false;
|
||||||
|
@ -81,6 +81,7 @@ where
|
|||||||
R: Rand,
|
R: Rand,
|
||||||
{
|
{
|
||||||
mutator: M,
|
mutator: M,
|
||||||
|
#[allow(clippy::type_complexity)]
|
||||||
phantom: PhantomData<(C, CS, E, EM, I, OT, R, S)>,
|
phantom: PhantomData<(C, CS, E, EM, I, OT, R, S)>,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -25,7 +25,7 @@ use crate::{
|
|||||||
use crate::inputs::bytes::BytesInput;
|
use crate::inputs::bytes::BytesInput;
|
||||||
|
|
||||||
/// The maximum size of a testcase
|
/// The maximum size of a testcase
|
||||||
pub const DEFAULT_MAX_SIZE: usize = 1048576;
|
pub const DEFAULT_MAX_SIZE: usize = 1_048_576;
|
||||||
|
|
||||||
/// Trait for elements offering a corpus
|
/// Trait for elements offering a corpus
|
||||||
pub trait HasCorpus<C, I>
|
pub trait HasCorpus<C, I>
|
||||||
@ -453,9 +453,9 @@ where
|
|||||||
where
|
where
|
||||||
OT: ObserversTuple,
|
OT: ObserversTuple,
|
||||||
{
|
{
|
||||||
Ok(self
|
self
|
||||||
.feedbacks_mut()
|
.feedbacks_mut()
|
||||||
.is_interesting_all(input, observers, exit_kind)?)
|
.is_interesting_all(input, observers, exit_kind)
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Adds this input to the corpus, if it's intersting, and return the index
|
/// Adds this input to the corpus, if it's intersting, and return the index
|
||||||
|
@ -97,14 +97,14 @@ pub trait Stats {
|
|||||||
fn corpus_size(&self) -> u64 {
|
fn corpus_size(&self) -> u64 {
|
||||||
self.client_stats()
|
self.client_stats()
|
||||||
.iter()
|
.iter()
|
||||||
.fold(0u64, |acc, x| acc + x.corpus_size)
|
.fold(0_u64, |acc, x| acc + x.corpus_size)
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Amount of elements in the objectives (combined for all children)
|
/// Amount of elements in the objectives (combined for all children)
|
||||||
fn objective_size(&self) -> u64 {
|
fn objective_size(&self) -> u64 {
|
||||||
self.client_stats()
|
self.client_stats()
|
||||||
.iter()
|
.iter()
|
||||||
.fold(0u64, |acc, x| acc + x.objective_size)
|
.fold(0_u64, |acc, x| acc + x.objective_size)
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Total executions
|
/// Total executions
|
||||||
@ -112,7 +112,7 @@ pub trait Stats {
|
|||||||
fn total_execs(&mut self) -> u64 {
|
fn total_execs(&mut self) -> u64 {
|
||||||
self.client_stats()
|
self.client_stats()
|
||||||
.iter()
|
.iter()
|
||||||
.fold(0u64, |acc, x| acc + x.executions)
|
.fold(0_u64, |acc, x| acc + x.executions)
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Executions per second
|
/// Executions per second
|
||||||
@ -121,7 +121,7 @@ pub trait Stats {
|
|||||||
let cur_time = current_time();
|
let cur_time = current_time();
|
||||||
self.client_stats_mut()
|
self.client_stats_mut()
|
||||||
.iter_mut()
|
.iter_mut()
|
||||||
.fold(0u64, |acc, x| acc + x.execs_per_sec(cur_time))
|
.fold(0_u64, |acc, x| acc + x.execs_per_sec(cur_time))
|
||||||
}
|
}
|
||||||
|
|
||||||
/// The client stats for a specific id, creating new if it doesn't exist
|
/// The client stats for a specific id, creating new if it doesn't exist
|
||||||
|
@ -179,6 +179,7 @@ pub struct Xoshiro256StarRand {
|
|||||||
}
|
}
|
||||||
|
|
||||||
impl Rand for Xoshiro256StarRand {
|
impl Rand for Xoshiro256StarRand {
|
||||||
|
#[allow(clippy::clippy::unreadable_literal)]
|
||||||
fn set_seed(&mut self, seed: u64) {
|
fn set_seed(&mut self, seed: u64) {
|
||||||
self.rand_seed[0] = xxh3_64_with_seed(&HASH_CONST.to_le_bytes(), seed);
|
self.rand_seed[0] = xxh3_64_with_seed(&HASH_CONST.to_le_bytes(), seed);
|
||||||
self.rand_seed[1] = self.rand_seed[0] ^ 0x1234567890abcdef;
|
self.rand_seed[1] = self.rand_seed[0] ^ 0x1234567890abcdef;
|
||||||
@ -223,6 +224,7 @@ pub struct XorShift64Rand {
|
|||||||
}
|
}
|
||||||
|
|
||||||
impl Rand for XorShift64Rand {
|
impl Rand for XorShift64Rand {
|
||||||
|
#[allow(clippy::clippy::unreadable_literal)]
|
||||||
fn set_seed(&mut self, seed: u64) {
|
fn set_seed(&mut self, seed: u64) {
|
||||||
self.rand_seed = seed ^ 0x1234567890abcdef;
|
self.rand_seed = seed ^ 0x1234567890abcdef;
|
||||||
}
|
}
|
||||||
@ -254,11 +256,13 @@ pub struct Lehmer64Rand {
|
|||||||
}
|
}
|
||||||
|
|
||||||
impl Rand for Lehmer64Rand {
|
impl Rand for Lehmer64Rand {
|
||||||
|
#[allow(clippy::clippy::unreadable_literal)]
|
||||||
fn set_seed(&mut self, seed: u64) {
|
fn set_seed(&mut self, seed: u64) {
|
||||||
self.rand_seed = (seed as u128) ^ 0x1234567890abcdef;
|
self.rand_seed = (seed as u128) ^ 0x1234567890abcdef;
|
||||||
}
|
}
|
||||||
|
|
||||||
#[inline]
|
#[inline]
|
||||||
|
#[allow(clippy::clippy::unreadable_literal)]
|
||||||
fn next(&mut self) -> u64 {
|
fn next(&mut self) -> u64 {
|
||||||
self.rand_seed *= 0xda942042e4dd58b5;
|
self.rand_seed *= 0xda942042e4dd58b5;
|
||||||
(self.rand_seed >> 64) as u64
|
(self.rand_seed >> 64) as u64
|
||||||
@ -303,6 +307,7 @@ impl Rand for RomuTrioRand {
|
|||||||
}
|
}
|
||||||
|
|
||||||
#[inline]
|
#[inline]
|
||||||
|
#[allow(clippy::clippy::unreadable_literal)]
|
||||||
fn next(&mut self) -> u64 {
|
fn next(&mut self) -> u64 {
|
||||||
let xp = self.x_state;
|
let xp = self.x_state;
|
||||||
let yp = self.y_state;
|
let yp = self.y_state;
|
||||||
@ -339,6 +344,7 @@ impl Rand for RomuDuoJrRand {
|
|||||||
}
|
}
|
||||||
|
|
||||||
#[inline]
|
#[inline]
|
||||||
|
#[allow(clippy::clippy::unreadable_literal)]
|
||||||
fn next(&mut self) -> u64 {
|
fn next(&mut self) -> u64 {
|
||||||
let xp = self.x_state;
|
let xp = self.x_state;
|
||||||
self.x_state = 15241094284759029579u64.wrapping_mul(self.y_state);
|
self.x_state = 15241094284759029579u64.wrapping_mul(self.y_state);
|
||||||
|
@ -1,36 +1,46 @@
|
|||||||
|
//! Compiler Wrapper from `LibAFL`
|
||||||
|
|
||||||
use std::{process::Command, string::String, vec::Vec};
|
use std::{process::Command, string::String, vec::Vec};
|
||||||
|
|
||||||
|
/// `LibAFL` CC Error Type
|
||||||
#[derive(Debug)]
|
#[derive(Debug)]
|
||||||
pub enum Error {
|
pub enum Error {
|
||||||
|
/// CC Wrapper called with invalid arguments
|
||||||
InvalidArguments(String),
|
InvalidArguments(String),
|
||||||
IOError(std::io::Error),
|
/// Io error occurred
|
||||||
|
Io(std::io::Error),
|
||||||
|
/// Something else happened
|
||||||
Unknown(String),
|
Unknown(String),
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO macOS
|
// TODO macOS
|
||||||
|
/// extension for static libraries
|
||||||
#[cfg(windows)]
|
#[cfg(windows)]
|
||||||
pub const LIB_EXT: &'static str = "lib";
|
pub const LIB_EXT: &str = "lib";
|
||||||
|
/// extension for static libraries
|
||||||
#[cfg(not(windows))]
|
#[cfg(not(windows))]
|
||||||
pub const LIB_EXT: &'static str = "a";
|
pub const LIB_EXT: &str = "a";
|
||||||
|
|
||||||
|
/// prefix for static libraries
|
||||||
#[cfg(windows)]
|
#[cfg(windows)]
|
||||||
pub const LIB_PREFIX: &'static str = "";
|
pub const LIB_PREFIX: &str = "";
|
||||||
|
/// prefix for static libraries
|
||||||
#[cfg(not(windows))]
|
#[cfg(not(windows))]
|
||||||
pub const LIB_PREFIX: &'static str = "lib";
|
pub const LIB_PREFIX: &str = "lib";
|
||||||
|
|
||||||
/// Wrap a compiler hijacking its arguments
|
/// Wrap a compiler hijacking its arguments
|
||||||
pub trait CompilerWrapper {
|
pub trait CompilerWrapper {
|
||||||
/// Set the wrapper arguments parsing a command line set of arguments
|
/// Set the wrapper arguments parsing a command line set of arguments
|
||||||
fn from_args<'a>(&'a mut self, args: &[String]) -> Result<&'a mut Self, Error>;
|
fn from_args(&mut self, args: &[String]) -> Result<&'_ mut Self, Error>;
|
||||||
|
|
||||||
/// Add a compiler argument
|
/// Add a compiler argument
|
||||||
fn add_arg<'a>(&'a mut self, arg: String) -> Result<&'a mut Self, Error>;
|
fn add_arg(&mut self, arg: String) -> Result<&'_ mut Self, Error>;
|
||||||
|
|
||||||
/// Add a compiler argument only when compiling
|
/// Add a compiler argument only when compiling
|
||||||
fn add_cc_arg<'a>(&'a mut self, arg: String) -> Result<&'a mut Self, Error>;
|
fn add_cc_arg(&mut self, arg: String) -> Result<&'_ mut Self, Error>;
|
||||||
|
|
||||||
/// Add a compiler argument only when linking
|
/// Add a compiler argument only when linking
|
||||||
fn add_link_arg<'a>(&'a mut self, arg: String) -> Result<&'a mut Self, Error>;
|
fn add_link_arg(&mut self, arg: String) -> Result<&'_ mut Self, Error>;
|
||||||
|
|
||||||
/// Command to run the compiler
|
/// Command to run the compiler
|
||||||
fn command(&mut self) -> Result<Vec<String>, Error>;
|
fn command(&mut self) -> Result<Vec<String>, Error>;
|
||||||
@ -42,14 +52,14 @@ pub trait CompilerWrapper {
|
|||||||
fn run(&mut self) -> Result<(), Error> {
|
fn run(&mut self) -> Result<(), Error> {
|
||||||
let args = self.command()?;
|
let args = self.command()?;
|
||||||
dbg!(&args);
|
dbg!(&args);
|
||||||
if args.len() < 1 {
|
if args.is_empty() {
|
||||||
return Err(Error::InvalidArguments(
|
return Err(Error::InvalidArguments(
|
||||||
"The number of arguments cannot be 0".into(),
|
"The number of arguments cannot be 0".into(),
|
||||||
));
|
));
|
||||||
}
|
}
|
||||||
let status = match Command::new(&args[0]).args(&args[1..]).status() {
|
let status = match Command::new(&args[0]).args(&args[1..]).status() {
|
||||||
Ok(s) => s,
|
Ok(s) => s,
|
||||||
Err(e) => return Err(Error::IOError(e)),
|
Err(e) => return Err(Error::Io(e)),
|
||||||
};
|
};
|
||||||
dbg!(status);
|
dbg!(status);
|
||||||
Ok(())
|
Ok(())
|
||||||
@ -57,6 +67,7 @@ pub trait CompilerWrapper {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// Wrap Clang
|
/// Wrap Clang
|
||||||
|
#[allow(clippy::clippy::struct_excessive_bools)]
|
||||||
pub struct ClangWrapper {
|
pub struct ClangWrapper {
|
||||||
optimize: bool,
|
optimize: bool,
|
||||||
wrapped_cc: String,
|
wrapped_cc: String,
|
||||||
@ -73,10 +84,11 @@ pub struct ClangWrapper {
|
|||||||
link_args: Vec<String>,
|
link_args: Vec<String>,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[allow(clippy::match_same_arms)] // for the linking = false wip for "shared"
|
||||||
impl CompilerWrapper for ClangWrapper {
|
impl CompilerWrapper for ClangWrapper {
|
||||||
fn from_args<'a>(&'a mut self, args: &[String]) -> Result<&'a mut Self, Error> {
|
fn from_args<'a>(&'a mut self, args: &[String]) -> Result<&'a mut Self, Error> {
|
||||||
let mut new_args = vec![];
|
let mut new_args = vec![];
|
||||||
if args.len() < 1 {
|
if args.is_empty() {
|
||||||
return Err(Error::InvalidArguments(
|
return Err(Error::InvalidArguments(
|
||||||
"The number of arguments cannot be 0".into(),
|
"The number of arguments cannot be 0".into(),
|
||||||
));
|
));
|
||||||
@ -122,17 +134,17 @@ impl CompilerWrapper for ClangWrapper {
|
|||||||
Ok(self)
|
Ok(self)
|
||||||
}
|
}
|
||||||
|
|
||||||
fn add_arg<'a>(&'a mut self, arg: String) -> Result<&'a mut Self, Error> {
|
fn add_arg(&mut self, arg: String) -> Result<&'_ mut Self, Error> {
|
||||||
self.base_args.push(arg);
|
self.base_args.push(arg);
|
||||||
Ok(self)
|
Ok(self)
|
||||||
}
|
}
|
||||||
|
|
||||||
fn add_cc_arg<'a>(&'a mut self, arg: String) -> Result<&'a mut Self, Error> {
|
fn add_cc_arg(&mut self, arg: String) -> Result<&'_ mut Self, Error> {
|
||||||
self.cc_args.push(arg);
|
self.cc_args.push(arg);
|
||||||
Ok(self)
|
Ok(self)
|
||||||
}
|
}
|
||||||
|
|
||||||
fn add_link_arg<'a>(&'a mut self, arg: String) -> Result<&'a mut Self, Error> {
|
fn add_link_arg(&mut self, arg: String) -> Result<&'_ mut Self, Error> {
|
||||||
self.link_args.push(arg);
|
self.link_args.push(arg);
|
||||||
Ok(self)
|
Ok(self)
|
||||||
}
|
}
|
||||||
@ -165,6 +177,8 @@ impl CompilerWrapper for ClangWrapper {
|
|||||||
}
|
}
|
||||||
|
|
||||||
impl ClangWrapper {
|
impl ClangWrapper {
|
||||||
|
/// Create a new Clang Wrapper
|
||||||
|
#[must_use]
|
||||||
pub fn new(wrapped_cc: &str, wrapped_cxx: &str) -> Self {
|
pub fn new(wrapped_cc: &str, wrapped_cxx: &str) -> Self {
|
||||||
Self {
|
Self {
|
||||||
optimize: true,
|
optimize: true,
|
||||||
@ -181,12 +195,14 @@ impl ClangWrapper {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn dont_optimize<'a>(&'a mut self) -> &'a mut Self {
|
/// Disable optimizations
|
||||||
|
pub fn dont_optimize(&mut self) -> &'_ mut Self {
|
||||||
self.optimize = false;
|
self.optimize = false;
|
||||||
self
|
self
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn is_cpp<'a>(&'a mut self) -> &'a mut Self {
|
/// set cpp mode
|
||||||
|
pub fn is_cpp(&mut self) -> &'_ mut Self {
|
||||||
self.is_cpp = true;
|
self.is_cpp = true;
|
||||||
self
|
self
|
||||||
}
|
}
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
// build.rs
|
//! build.rs for `libafl_targets`
|
||||||
|
|
||||||
use std::env;
|
use std::env;
|
||||||
use std::path::Path;
|
use std::path::Path;
|
||||||
|
@ -1,3 +1,5 @@
|
|||||||
|
//! `libafl_targets` contains runtime code, injected in the target itself during compilation.
|
||||||
|
|
||||||
#[cfg(any(feature = "pcguard_edges", feature = "pcguard_hitcounts"))]
|
#[cfg(any(feature = "pcguard_edges", feature = "pcguard_hitcounts"))]
|
||||||
pub mod pcguard;
|
pub mod pcguard;
|
||||||
#[cfg(any(feature = "pcguard_edges", feature = "pcguard_hitcounts"))]
|
#[cfg(any(feature = "pcguard_edges", feature = "pcguard_hitcounts"))]
|
||||||
|
Loading…
x
Reference in New Issue
Block a user