add full_metadata fuzz target, fix OOB crash in property extractors

This commit is contained in:
2026-06-02 17:17:50 +02:00
parent 277d4796e1
commit a2020a2e2c
4 changed files with 54 additions and 11 deletions
+28
View File
@@ -0,0 +1,28 @@
[package]
name = "notalterra-fuzz"
version = "0.0.0"
publish = false
edition = "2021"
[package.metadata]
cargo-fuzz = true
[dependencies]
libfuzzer-sys = "0.4"
[dependencies.notalterra]
path = ".."
[[bin]]
name = "parse_gvas"
path = "fuzz_targets/parse_gvas.rs"
test = false
doc = false
bench = false
[[bin]]
name = "full_metadata"
path = "fuzz_targets/full_metadata.rs"
test = false
doc = false
bench = false
+15
View File
@@ -0,0 +1,15 @@
#![no_main]
use libfuzzer_sys::fuzz_target;
fuzz_target!(|data: &[u8]| {
// Exercises extract_full_metadata — covers IntProperty, DoubleProperty,
// additional StrProperty (GameMode, LevelName, BuildBranch) and
// BoolProperty (bIsMultiplayerSave, bWasMultiplayerSave) code paths
// not reached by the existing parse_gvas target.
let tmp = std::env::temp_dir();
let path = tmp.join("notalterra_fuzz_full_meta.sav");
let _ = std::fs::write(&path, data);
let _ = notalterra::gvas::extract_full_metadata(&path);
let _ = std::fs::remove_file(&path);
});
+7 -7
View File
@@ -1,7 +1,7 @@
#[fuzz]
mod target {
#[fuzz]
fn parse_gvas(data: &[u8]) {
let _ = notalterra::gvas::extract_metadata_from_bytes(data);
}
}
#![no_main]
use libfuzzer_sys::fuzz_target;
fuzz_target!(|data: &[u8]| {
let _ = notalterra::gvas::extract_metadata_from_bytes(data);
});