(
&mut self,
program: &Program,
err_msg: &ProgramError,
)
| 552 | } |
| 553 | |
| 554 | pub fn save_err_program( |
| 555 | &mut self, |
| 556 | program: &Program, |
| 557 | err_msg: &ProgramError, |
| 558 | ) -> Result<PathBuf> { |
| 559 | let save_dir = self.get_library_error_seed_dir()?; |
| 560 | |
| 561 | let save_dir: PathBuf = match err_msg { |
| 562 | ProgramError::Syntax(_) => [save_dir.clone(), "syntax".into()].iter().collect(), |
| 563 | ProgramError::Link(_) => [save_dir.clone(), "link".into()].iter().collect(), |
| 564 | ProgramError::Execute(_) => [save_dir.clone(), "execute".into()].iter().collect(), |
| 565 | ProgramError::Fuzzer(_) => [save_dir.clone(), "fuzzer".into()].iter().collect(), |
| 566 | ProgramError::Coverage(_) => [save_dir.clone(), "coverage".into()].iter().collect(), |
| 567 | ProgramError::Hang(_) => [save_dir.clone(), "hang".into()].iter().collect(), |
| 568 | }; |
| 569 | utils::create_dir_if_nonexist(&save_dir)?; |
| 570 | let seed_path: PathBuf = [ |
| 571 | save_dir, |
| 572 | format!("id_{number:>0width$}.cc", number = program.id, width = 6).into(), |
| 573 | ] |
| 574 | .iter() |
| 575 | .collect(); |
| 576 | let content = [ |
| 577 | utils::format_library_header_strings(self).to_string(), |
| 578 | program.serialize(), |
| 579 | err_msg.get_err_msg(), |
| 580 | ] |
| 581 | .concat(); |
| 582 | std::fs::write(&seed_path, content)?; |
| 583 | Ok(seed_path) |
| 584 | } |
| 585 | |
| 586 | pub fn load_programs_from_seeds(&mut self) -> Result<()> { |
| 587 | self.seed_queue.clear(); |
no test coverage detected