build.sh builds the Rust targets with the Go-era names, refuses an OUT that is /, $HOME or the tree, checks static linking and names the Go targets Rust cannot build. packaging/package.sh builds and inspects packages without signing or publishing; repo.sh reuses it. Seven fuzz targets (one found a URL-parser panic, fixed here with a regression test), cargo-deny policy, CI for lint, tests on Linux/macOS/Windows, cross builds with qemu runs, supply chain and fuzzing. Compatibility specification and security notes. Co-Authored-By: Claude <noreply@anthropic.com>
16 lines
652 B
Rust
16 lines
652 B
Rust
// SPDX-License-Identifier: GPL-3.0-or-later
|
|
//! Record JSON parsing never panics; an accepted record re-encodes (Go's
|
|
//! JSON) to something that parses back to the same values.
|
|
#![no_main]
|
|
use vault::store::{Id, Record};
|
|
|
|
libfuzzer_sys::fuzz_target!(|data: &[u8]| {
|
|
if let Ok(r) = Record::from_json(data, Id([0; 16])) {
|
|
let Some(j) = r.to_json() else { return };
|
|
let r2 = Record::from_json(&j, Id([0; 16])).expect("own encoding parses");
|
|
assert_eq!(r.name, r2.name);
|
|
assert_eq!((r.size, r.mode, r.modified, r.added), (r2.size, r2.mode, r2.modified, r2.added));
|
|
assert!(r.seed.same_as(&r2.seed));
|
|
}
|
|
});
|