token mutations: avoid a few infallible unwraps (#1919)

This commit is contained in:
Mrmaxmeier 2024-03-07 18:26:59 +01:00 committed by GitHub
parent e48c8c0e23
commit 6747a7dc2f
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 32 additions and 36 deletions

View File

@ -413,14 +413,13 @@ where
} }
let tokens_len = { let tokens_len = {
let meta = state.metadata_map().get::<Tokens>(); let Some(meta) = state.metadata_map().get::<Tokens>() else {
if meta.is_none() { return Ok(MutationResult::Skipped);
};
if meta.tokens().is_empty() {
return Ok(MutationResult::Skipped); return Ok(MutationResult::Skipped);
} }
if meta.unwrap().tokens().is_empty() { meta.tokens().len()
return Ok(MutationResult::Skipped);
}
meta.unwrap().tokens().len()
}; };
let token_idx = state.rand_mut().below(tokens_len as u64) as usize; let token_idx = state.rand_mut().below(tokens_len as u64) as usize;
@ -478,14 +477,13 @@ where
} }
let tokens_len = { let tokens_len = {
let meta = state.metadata_map().get::<Tokens>(); let Some(meta) = state.metadata_map().get::<Tokens>() else {
if meta.is_none() { return Ok(MutationResult::Skipped);
};
if meta.tokens().is_empty() {
return Ok(MutationResult::Skipped); return Ok(MutationResult::Skipped);
} }
if meta.unwrap().tokens().is_empty() { meta.tokens().len()
return Ok(MutationResult::Skipped);
}
meta.unwrap().tokens().len()
}; };
let token_idx = state.rand_mut().below(tokens_len as u64) as usize; let token_idx = state.rand_mut().below(tokens_len as u64) as usize;

View File

@ -314,14 +314,13 @@ where
) -> Result<MutationResult, Error> { ) -> Result<MutationResult, Error> {
let max_size = state.max_size(); let max_size = state.max_size();
let tokens_len = { let tokens_len = {
let meta = state.metadata_map().get::<Tokens>(); let Some(meta) = state.metadata_map().get::<Tokens>() else {
if meta.is_none() { return Ok(MutationResult::Skipped);
};
if meta.tokens().is_empty() {
return Ok(MutationResult::Skipped); return Ok(MutationResult::Skipped);
} }
if meta.unwrap().tokens().is_empty() { meta.tokens().len()
return Ok(MutationResult::Skipped);
}
meta.unwrap().tokens().len()
}; };
let token_idx = state.rand_mut().below(tokens_len as u64) as usize; let token_idx = state.rand_mut().below(tokens_len as u64) as usize;
@ -386,14 +385,13 @@ where
} }
let tokens_len = { let tokens_len = {
let meta = state.metadata_map().get::<Tokens>(); let Some(meta) = state.metadata_map().get::<Tokens>() else {
if meta.is_none() { return Ok(MutationResult::Skipped);
};
if meta.tokens().is_empty() {
return Ok(MutationResult::Skipped); return Ok(MutationResult::Skipped);
} }
if meta.unwrap().tokens().is_empty() { meta.tokens().len()
return Ok(MutationResult::Skipped);
}
meta.unwrap().tokens().len()
}; };
let token_idx = state.rand_mut().below(tokens_len as u64) as usize; let token_idx = state.rand_mut().below(tokens_len as u64) as usize;
@ -451,15 +449,14 @@ where
} }
let cmps_len = { let cmps_len = {
let meta = state.metadata_map().get::<CmpValuesMetadata>(); let Some(meta) = state.metadata_map().get::<CmpValuesMetadata>() else {
return Ok(MutationResult::Skipped);
};
log::trace!("meta: {:x?}", meta); log::trace!("meta: {:x?}", meta);
if meta.is_none() { if meta.list.is_empty() {
return Ok(MutationResult::Skipped); return Ok(MutationResult::Skipped);
} }
if meta.unwrap().list.is_empty() { meta.list.len()
return Ok(MutationResult::Skipped);
}
meta.unwrap().list.len()
}; };
let idx = state.rand_mut().below(cmps_len as u64) as usize; let idx = state.rand_mut().below(cmps_len as u64) as usize;
@ -1118,17 +1115,18 @@ where
} }
let (cmp_len, cmp_meta, taint_meta) = { let (cmp_len, cmp_meta, taint_meta) = {
let cmp_meta = state.metadata_map().get::<AFLppCmpValuesMetadata>(); let (Some(cmp_meta), Some(taint_meta)) = (
let taint_meta = state.metadata_map().get::<TaintMetadata>(); state.metadata_map().get::<AFLppCmpValuesMetadata>(),
if cmp_meta.is_none() || taint_meta.is_none() { state.metadata_map().get::<TaintMetadata>(),
) else {
return Ok(vec![]); return Ok(vec![]);
} };
let cmp_len = cmp_meta.unwrap().headers().len(); let cmp_len = cmp_meta.headers().len();
if cmp_len == 0 { if cmp_len == 0 {
return Ok(vec![]); return Ok(vec![]);
} }
(cmp_len, cmp_meta.unwrap(), taint_meta.unwrap()) (cmp_len, cmp_meta, taint_meta)
}; };
// These idxes must saved in this mutator itself! // These idxes must saved in this mutator itself!