mirror of
https://github.com/forkless/NotAlterra.git
synced 2026-08-16 08:36:37 +02:00
36 lines
1.1 KiB
Rust
36 lines
1.1 KiB
Rust
#![no_main]
|
|
|
|
use libfuzzer_sys::fuzz_target;
|
|
|
|
fuzz_target!(|data: &[u8]| {
|
|
// Exercises the tar.gz backup round-trip: create an archive from a
|
|
// directory tree of fuzzed save files, then restore and verify.
|
|
// This catches logic bugs in create_tar_gz / extract_tar_gz, not
|
|
// bugs in the tar or flate2 libraries themselves.
|
|
use std::fs;
|
|
|
|
let tmp = match std::env::temp_dir() {
|
|
t => t,
|
|
};
|
|
let src = tmp.join("notalterra_fuzz_backup_src");
|
|
let arc_dir = tmp.join("notalterra_fuzz_backup_arc");
|
|
let ext_dir = tmp.join("notalterra_fuzz_backup_ext");
|
|
|
|
let _ = fs::create_dir_all(&src);
|
|
let _ = fs::create_dir_all(&arc_dir);
|
|
let _ = fs::create_dir_all(&ext_dir);
|
|
|
|
// Write fuzzed data as a save file
|
|
let _ = fs::write(src.join("savegame_0.sav"), data);
|
|
|
|
// Create tar.gz and restore
|
|
let Ok(result) = notalterra::ops::create_full_backup(&src)
|
|
else { return };
|
|
let _ = notalterra::ops::restore_full_backup(&result.dest_path, &ext_dir);
|
|
|
|
// Cleanup
|
|
let _ = fs::remove_dir_all(&src);
|
|
let _ = fs::remove_dir_all(&arc_dir);
|
|
let _ = fs::remove_dir_all(&ext_dir);
|
|
});
|