Fix forkserver regression in LTO mode (#1114)
* regression * fix * chg * Comment * fmt
This commit is contained in:
parent
452ca7a672
commit
2a926f6546
@ -761,7 +761,6 @@ impl<'a, SP> ForkserverExecutorBuilder<'a, SP> {
|
|||||||
// TODO set AFL_MAP_SIZE
|
// TODO set AFL_MAP_SIZE
|
||||||
assert!(self.map_size.is_none() || map_size as usize <= self.map_size.unwrap());
|
assert!(self.map_size.is_none() || map_size as usize <= self.map_size.unwrap());
|
||||||
|
|
||||||
log::info!("Target MAP SIZE = {:#x}", self.real_map_size);
|
|
||||||
self.map_size = Some(map_size as usize);
|
self.map_size = Some(map_size as usize);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -782,35 +781,44 @@ impl<'a, SP> ForkserverExecutorBuilder<'a, SP> {
|
|||||||
self.uses_shmem_testcase = true;
|
self.uses_shmem_testcase = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
let send_len = forkserver.write_ctl(send_status)?;
|
if (status & FS_OPT_AUTODICT == FS_OPT_AUTODICT) && self.autotokens.is_some() {
|
||||||
if send_len != 4 {
|
log::info!("Using AUTODICT feature");
|
||||||
return Err(Error::unknown("Writing to forkserver failed.".to_string()));
|
send_status |= FS_OPT_AUTODICT;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (send_status & FS_OPT_AUTODICT) == FS_OPT_AUTODICT {
|
if send_status != FS_OPT_ENABLED {
|
||||||
let (read_len, dict_size) = forkserver.read_st()?;
|
// if send_status is not changed (Options are available but we didn't use any), then don't send the next write_ctl message.
|
||||||
if read_len != 4 {
|
// This is important
|
||||||
return Err(Error::unknown(
|
|
||||||
"Reading from forkserver failed.".to_string(),
|
let send_len = forkserver.write_ctl(send_status)?;
|
||||||
));
|
if send_len != 4 {
|
||||||
|
return Err(Error::unknown("Writing to forkserver failed.".to_string()));
|
||||||
}
|
}
|
||||||
|
|
||||||
if !(2..=0xffffff).contains(&dict_size) {
|
if (send_status & FS_OPT_AUTODICT) == FS_OPT_AUTODICT {
|
||||||
return Err(Error::illegal_state(
|
let (read_len, dict_size) = forkserver.read_st()?;
|
||||||
"Dictionary has an illegal size".to_string(),
|
if read_len != 4 {
|
||||||
));
|
return Err(Error::unknown(
|
||||||
}
|
"Reading from forkserver failed.".to_string(),
|
||||||
|
));
|
||||||
|
}
|
||||||
|
|
||||||
log::info!("Autodict size {dict_size:x}");
|
if !(2..=0xffffff).contains(&dict_size) {
|
||||||
|
return Err(Error::illegal_state(
|
||||||
|
"Dictionary has an illegal size".to_string(),
|
||||||
|
));
|
||||||
|
}
|
||||||
|
|
||||||
let (rlen, buf) = forkserver.read_st_size(dict_size as usize)?;
|
log::info!("Autodict size {dict_size:x}");
|
||||||
|
|
||||||
if rlen != dict_size as usize {
|
let (rlen, buf) = forkserver.read_st_size(dict_size as usize)?;
|
||||||
return Err(Error::unknown("Failed to load autodictionary".to_string()));
|
|
||||||
}
|
|
||||||
|
|
||||||
if let Some(t) = &mut self.autotokens {
|
if rlen != dict_size as usize {
|
||||||
t.parse_autodict(&buf, dict_size as usize);
|
return Err(Error::unknown("Failed to load autodictionary".to_string()));
|
||||||
|
}
|
||||||
|
if let Some(t) = &mut self.autotokens {
|
||||||
|
t.parse_autodict(&buf, dict_size as usize);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user