diff --git a/CHANGELOG.md b/CHANGELOG.md index 31ffb6e..b880692 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,31 @@ All notable changes to NotAlterra are documented in this file. --- +## [v0.4.0] — 2026-06-03 + +### Added +- **`--help` / `-h` flag** — displays usage information +- **tar.gz backup format** — one archive per backup event, all slots in one + file. Standard `tar -xzf` recovers data without the tool (no vendor lock-in). + Safeguards: atomic write (`.tmp` → rename), per-file SHA256 manifest, + per-entry restore without full decompress. +- **Migration path** — old `NotAlterra_Backups/` directory-tree backups are + automatically detected and imported into the new tar.gz format +- **Bus factor mitigation** — documented in GOVERNANCE.md: emergency signing + key stored with a non-technical trusted person, revocable if compromised + +### Changed +- **File layout** — backups stored in `backups/saves/` (tar.gz), + `backups/config/` (.ini archives), logs in `logs/transaction.log` +- **Stale `config.ini` removed** on first launch from prior versions +- **Dependencies** — added `tar` + `flate2` (pure Rust, +~150KB binary) + +### Testing +- 6 migration unit tests (basic, empty, nonexistent, integrity, filtering, idempotency) +- Full round-trip integration tests for tar.gz backup/restore +- Fuzz target for backup round-trip (10s: 11,717 runs, zero crashes) +- File permissions fixed in tar headers (`0o644` instead of `0o000`) + ## [v0.3.2] — 2026-06-02 ### Added diff --git a/Cargo.lock b/Cargo.lock index 2c6e90c..8997d89 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -540,7 +540,7 @@ dependencies = [ [[package]] name = "notalterra" -version = "0.3.2" +version = "0.4.0" dependencies = [ "anyhow", "chrono", diff --git a/Cargo.toml b/Cargo.toml index 7ae4db8..4487395 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "notalterra" -version = "0.3.2" +version = "0.4.0" edition = "2021" authors = ["NotAlterra"] license = "MIT" diff --git a/_release.md b/_release.md index b7558fd..5d01e12 100644 --- a/_release.md +++ b/_release.md @@ -4,11 +4,15 @@ Cross-platform terminal application. No admin permissions or network access req Pre-compiled binaries — no installation, no dependencies. Just download, extract, and run. -### What's new in v0.3.2 +### What's new in v0.4.0 -• `config.ini` removed entirely — no paths written to disk -• Save folder is session-only, entered via `Set save folder` -• Disclaimer tracked via 0-byte sentinel file (`NotAlterra_LICENSE_ACCEPTED`) -• Lightweight startup check for common save paths (no profile/drive scans) +• tar.gz backup format — one archive per backup event, standard `tar -xzf` recovers data without the tool +• File restructure: `backups/saves/`, `backups/config/`, `logs/` +• Automatic migration from old `NotAlterra_Backups/` directory-tree format +• `--help` / `-h` flag +• Stale `config.ini` auto-removed from prior versions +• Bus factor mitigation plan documented in GOVERNANCE.md +• 6 migration tests, full round-trip tar.gz integration tests +• `tar` + `flate2` dependencies added (pure Rust, ~150KB increase) _Builds: Linux (amd64) • Windows x64_ diff --git a/fuzz/Cargo.lock b/fuzz/Cargo.lock index ba6080c..f31f382 100644 --- a/fuzz/Cargo.lock +++ b/fuzz/Cargo.lock @@ -2,6 +2,12 @@ # It is not intended for manual editing. version = 4 +[[package]] +name = "adler2" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "320119579fcad9c21884f5c4861d16174d0e06250625266f50fe6898340abefa" + [[package]] name = "aho-corasick" version = "1.1.4" @@ -122,6 +128,15 @@ version = "0.8.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b" +[[package]] +name = "crc32fast" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9481c1c90cbf2ac953f07c8d4a58aa3945c425b7185c9154d67a65e4230da511" +dependencies = [ + "cfg-if", +] + [[package]] name = "crossterm" version = "0.28.1" @@ -132,7 +147,7 @@ dependencies = [ "crossterm_winapi", "mio", "parking_lot", - "rustix", + "rustix 0.38.44", "signal-hook", "signal-hook-mio", "winapi", @@ -224,12 +239,32 @@ dependencies = [ "windows-sys 0.61.2", ] +[[package]] +name = "filetime" +version = "0.2.29" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c287a33c7f0a620c38e641e7f60827713987b3c0f26e8ddc9462cc69cf75759" +dependencies = [ + "cfg-if", + "libc", +] + [[package]] name = "find-msvc-tools" version = "0.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5baebc0774151f905a1a2cc41989300b1e6fbb29aff0ceffa1064fdd3088d582" +[[package]] +name = "flate2" +version = "1.1.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "843fba2746e448b37e26a819579957415c8cef339bf08564fe8b7ddbd959573c" +dependencies = [ + "crc32fast", + "miniz_oxide", +] + [[package]] name = "foldhash" version = "0.1.5" @@ -420,6 +455,12 @@ version = "0.4.15" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d26c52dbd32dccf2d10cac7725f8eae5296885fb5703b261f7d0a0739ec807ab" +[[package]] +name = "linux-raw-sys" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "32a66949e030da00e8c7d4434b251670a91556f4144941d37452769c25d58a53" + [[package]] name = "lock_api" version = "0.4.14" @@ -456,6 +497,16 @@ version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" +[[package]] +name = "miniz_oxide" +version = "0.8.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1fa76a2c86f704bdb222d66965fb3d63269ce38518b83cb0575fca855ebb6316" +dependencies = [ + "adler2", + "simd-adler32", +] + [[package]] name = "mio" version = "1.2.1" @@ -480,15 +531,17 @@ dependencies = [ [[package]] name = "notalterra" -version = "0.2.3" +version = "0.4.0" dependencies = [ "anyhow", "chrono", "crossterm", "dirs", + "flate2", "nom", "ratatui", "regex", + "tar", "unicode-width 0.2.0", ] @@ -659,10 +712,23 @@ dependencies = [ "bitflags", "errno", "libc", - "linux-raw-sys", + "linux-raw-sys 0.4.15", "windows-sys 0.59.0", ] +[[package]] +name = "rustix" +version = "1.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6fe4565b9518b83ef4f91bb47ce29620ca828bd32cb7e408f0062e9930ba190" +dependencies = [ + "bitflags", + "errno", + "libc", + "linux-raw-sys 0.12.1", + "windows-sys 0.61.2", +] + [[package]] name = "rustversion" version = "1.0.22" @@ -718,6 +784,12 @@ dependencies = [ "libc", ] +[[package]] +name = "simd-adler32" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "703d5c7ef118737c72f1af64ad2f6f8c5e1921f818cdcb97b8fe6fc69bf66214" + [[package]] name = "slab" version = "0.4.12" @@ -775,6 +847,17 @@ dependencies = [ "unicode-ident", ] +[[package]] +name = "tar" +version = "0.4.46" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f6221d9a6003c78398e3b239969f352578258df48c8eb051caadae0015bc840" +dependencies = [ + "filetime", + "libc", + "xattr", +] + [[package]] name = "thiserror" version = "1.0.69" @@ -1124,3 +1207,13 @@ name = "wit-bindgen" version = "0.57.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1ebf944e87a7c253233ad6766e082e3cd714b5d03812acc24c318f549614536e" + +[[package]] +name = "xattr" +version = "1.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "32e45ad4206f6d2479085147f02bc2ef834ac85886624a23575ae137c8aa8156" +dependencies = [ + "libc", + "rustix 1.1.4", +] diff --git a/fuzz/Cargo.toml b/fuzz/Cargo.toml index 1b061ff..3e412df 100644 --- a/fuzz/Cargo.toml +++ b/fuzz/Cargo.toml @@ -26,3 +26,10 @@ path = "fuzz_targets/full_metadata.rs" test = false doc = false bench = false + +[[bin]] +name = "backup_roundtrip" +path = "fuzz_targets/backup_roundtrip.rs" +test = false +doc = false +bench = false diff --git a/fuzz/corpus/backup_roundtrip/00375065763ad15e0a040210fcc6a75e14be67dc b/fuzz/corpus/backup_roundtrip/00375065763ad15e0a040210fcc6a75e14be67dc new file mode 100644 index 0000000..1238cbf --- /dev/null +++ b/fuzz/corpus/backup_roundtrip/00375065763ad15e0a040210fcc6a75e14be67dc @@ -0,0 +1 @@ +GGGG \ No newline at end of file diff --git a/fuzz/corpus/backup_roundtrip/032b3d15041f03dbd006844b823cd7126b556bc0 b/fuzz/corpus/backup_roundtrip/032b3d15041f03dbd006844b823cd7126b556bc0 new file mode 100644 index 0000000..f25e15b Binary files /dev/null and b/fuzz/corpus/backup_roundtrip/032b3d15041f03dbd006844b823cd7126b556bc0 differ diff --git a/fuzz/corpus/backup_roundtrip/0346abc3ab53a2969524e1087e202a8a51e99494 b/fuzz/corpus/backup_roundtrip/0346abc3ab53a2969524e1087e202a8a51e99494 new file mode 100644 index 0000000..4584cf7 Binary files /dev/null and b/fuzz/corpus/backup_roundtrip/0346abc3ab53a2969524e1087e202a8a51e99494 differ diff --git a/fuzz/corpus/backup_roundtrip/037511fa9fa48c1ee67992fbfc59f09fba7b3b3d b/fuzz/corpus/backup_roundtrip/037511fa9fa48c1ee67992fbfc59f09fba7b3b3d new file mode 100644 index 0000000..ed6e48c Binary files /dev/null and b/fuzz/corpus/backup_roundtrip/037511fa9fa48c1ee67992fbfc59f09fba7b3b3d differ diff --git a/fuzz/corpus/backup_roundtrip/082736e67e56018e6391be1fc06089fb207edc54 b/fuzz/corpus/backup_roundtrip/082736e67e56018e6391be1fc06089fb207edc54 new file mode 100644 index 0000000..f6a5055 --- /dev/null +++ b/fuzz/corpus/backup_roundtrip/082736e67e56018e6391be1fc06089fb207edc54 @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/fuzz/corpus/backup_roundtrip/09fc0a4fe15bea513ea8508d169180181f53e9f3 b/fuzz/corpus/backup_roundtrip/09fc0a4fe15bea513ea8508d169180181f53e9f3 new file mode 100644 index 0000000..ddb4f36 Binary files /dev/null and b/fuzz/corpus/backup_roundtrip/09fc0a4fe15bea513ea8508d169180181f53e9f3 differ diff --git a/fuzz/corpus/backup_roundtrip/0b832ffe11d2337ca3efd79aa32140076d90dc67 b/fuzz/corpus/backup_roundtrip/0b832ffe11d2337ca3efd79aa32140076d90dc67 new file mode 100644 index 0000000..4d0d401 Binary files /dev/null and b/fuzz/corpus/backup_roundtrip/0b832ffe11d2337ca3efd79aa32140076d90dc67 differ diff --git a/fuzz/corpus/backup_roundtrip/0dcd89913dc99f3bb7a5d569202e52649e853bd5 b/fuzz/corpus/backup_roundtrip/0dcd89913dc99f3bb7a5d569202e52649e853bd5 new file mode 100644 index 0000000..dce3d38 Binary files /dev/null and b/fuzz/corpus/backup_roundtrip/0dcd89913dc99f3bb7a5d569202e52649e853bd5 differ diff --git a/fuzz/corpus/backup_roundtrip/0fe989db61671a168541c0359e65c690e5e5b345 b/fuzz/corpus/backup_roundtrip/0fe989db61671a168541c0359e65c690e5e5b345 new file mode 100644 index 0000000..a8164cb Binary files /dev/null and b/fuzz/corpus/backup_roundtrip/0fe989db61671a168541c0359e65c690e5e5b345 differ diff --git a/fuzz/corpus/backup_roundtrip/1196b7d560041a9d0abfd805d58dc716a27716db b/fuzz/corpus/backup_roundtrip/1196b7d560041a9d0abfd805d58dc716a27716db new file mode 100644 index 0000000..3b37a74 Binary files /dev/null and b/fuzz/corpus/backup_roundtrip/1196b7d560041a9d0abfd805d58dc716a27716db differ diff --git a/fuzz/corpus/backup_roundtrip/1296a504cbacc7da903b9a60033fc8ebcb969498 b/fuzz/corpus/backup_roundtrip/1296a504cbacc7da903b9a60033fc8ebcb969498 new file mode 100644 index 0000000..3348304 --- /dev/null +++ b/fuzz/corpus/backup_roundtrip/1296a504cbacc7da903b9a60033fc8ebcb969498 @@ -0,0 +1 @@ +(( \ No newline at end of file diff --git a/fuzz/corpus/backup_roundtrip/151000914f15e7b8f1520ca2c14984dc6e660ee9 b/fuzz/corpus/backup_roundtrip/151000914f15e7b8f1520ca2c14984dc6e660ee9 new file mode 100644 index 0000000..cbb727d Binary files /dev/null and b/fuzz/corpus/backup_roundtrip/151000914f15e7b8f1520ca2c14984dc6e660ee9 differ diff --git a/fuzz/corpus/backup_roundtrip/15a7ea2aa657c56e1f3924ddc513053eda4ee86c b/fuzz/corpus/backup_roundtrip/15a7ea2aa657c56e1f3924ddc513053eda4ee86c new file mode 100644 index 0000000..f46622e Binary files /dev/null and b/fuzz/corpus/backup_roundtrip/15a7ea2aa657c56e1f3924ddc513053eda4ee86c differ diff --git a/fuzz/corpus/backup_roundtrip/178746ad37342913168064c5697c45def1772b5d b/fuzz/corpus/backup_roundtrip/178746ad37342913168064c5697c45def1772b5d new file mode 100644 index 0000000..d3bed84 Binary files /dev/null and b/fuzz/corpus/backup_roundtrip/178746ad37342913168064c5697c45def1772b5d differ diff --git a/fuzz/corpus/backup_roundtrip/1b6453892473a467d07372d45eb05abc2031647a b/fuzz/corpus/backup_roundtrip/1b6453892473a467d07372d45eb05abc2031647a new file mode 100644 index 0000000..bf0d87a --- /dev/null +++ b/fuzz/corpus/backup_roundtrip/1b6453892473a467d07372d45eb05abc2031647a @@ -0,0 +1 @@ +4 \ No newline at end of file diff --git a/fuzz/corpus/backup_roundtrip/223fd7f7045ebe351ae2d2da420be6d387a6cf35 b/fuzz/corpus/backup_roundtrip/223fd7f7045ebe351ae2d2da420be6d387a6cf35 new file mode 100644 index 0000000..2934e3d Binary files /dev/null and b/fuzz/corpus/backup_roundtrip/223fd7f7045ebe351ae2d2da420be6d387a6cf35 differ diff --git a/fuzz/corpus/backup_roundtrip/23e54686b5c01fb7674ba3a6b48129738b0f5186 b/fuzz/corpus/backup_roundtrip/23e54686b5c01fb7674ba3a6b48129738b0f5186 new file mode 100644 index 0000000..6266ea4 Binary files /dev/null and b/fuzz/corpus/backup_roundtrip/23e54686b5c01fb7674ba3a6b48129738b0f5186 differ diff --git a/fuzz/corpus/backup_roundtrip/2ad8102ef897a11f5c34702d41db8a5ea8d824d5 b/fuzz/corpus/backup_roundtrip/2ad8102ef897a11f5c34702d41db8a5ea8d824d5 new file mode 100644 index 0000000..c7125b0 --- /dev/null +++ b/fuzz/corpus/backup_roundtrip/2ad8102ef897a11f5c34702d41db8a5ea8d824d5 @@ -0,0 +1 @@ +ïþÿ; \ No newline at end of file diff --git a/fuzz/corpus/backup_roundtrip/2b16aab19cae6cdcd54a33aa0325508e79302926 b/fuzz/corpus/backup_roundtrip/2b16aab19cae6cdcd54a33aa0325508e79302926 new file mode 100644 index 0000000..1a3ae2a Binary files /dev/null and b/fuzz/corpus/backup_roundtrip/2b16aab19cae6cdcd54a33aa0325508e79302926 differ diff --git a/fuzz/corpus/backup_roundtrip/2c0ab0ab8e7d4e5dde15c135813a3e70dfc32400 b/fuzz/corpus/backup_roundtrip/2c0ab0ab8e7d4e5dde15c135813a3e70dfc32400 new file mode 100644 index 0000000..5dfa5e6 --- /dev/null +++ b/fuzz/corpus/backup_roundtrip/2c0ab0ab8e7d4e5dde15c135813a3e70dfc32400 @@ -0,0 +1 @@ +–4 \ No newline at end of file diff --git a/fuzz/corpus/backup_roundtrip/2c91860cce9fbe5f9ce73ed6836bbe789a7d0589 b/fuzz/corpus/backup_roundtrip/2c91860cce9fbe5f9ce73ed6836bbe789a7d0589 new file mode 100644 index 0000000..246ab46 Binary files /dev/null and b/fuzz/corpus/backup_roundtrip/2c91860cce9fbe5f9ce73ed6836bbe789a7d0589 differ diff --git a/fuzz/corpus/backup_roundtrip/2e622b0c32f96f49a83836b82d727c51c657079d b/fuzz/corpus/backup_roundtrip/2e622b0c32f96f49a83836b82d727c51c657079d new file mode 100644 index 0000000..9a3c10e Binary files /dev/null and b/fuzz/corpus/backup_roundtrip/2e622b0c32f96f49a83836b82d727c51c657079d differ diff --git a/fuzz/corpus/backup_roundtrip/2f1952914960f6f0ad959ea647241b3a71d90c64 b/fuzz/corpus/backup_roundtrip/2f1952914960f6f0ad959ea647241b3a71d90c64 new file mode 100644 index 0000000..6b6a778 Binary files /dev/null and b/fuzz/corpus/backup_roundtrip/2f1952914960f6f0ad959ea647241b3a71d90c64 differ diff --git a/fuzz/corpus/backup_roundtrip/316e69ba9e8d3c827b05a4036817aaf88cae3d2b b/fuzz/corpus/backup_roundtrip/316e69ba9e8d3c827b05a4036817aaf88cae3d2b new file mode 100644 index 0000000..bdd9db0 Binary files /dev/null and b/fuzz/corpus/backup_roundtrip/316e69ba9e8d3c827b05a4036817aaf88cae3d2b differ diff --git a/fuzz/corpus/backup_roundtrip/3b484d1bad41855e5b61729f6aac1125b068ca4f b/fuzz/corpus/backup_roundtrip/3b484d1bad41855e5b61729f6aac1125b068ca4f new file mode 100644 index 0000000..98767db Binary files /dev/null and b/fuzz/corpus/backup_roundtrip/3b484d1bad41855e5b61729f6aac1125b068ca4f differ diff --git a/fuzz/corpus/backup_roundtrip/3c49eff7d2e536583784d4b018eec583d3173c93 b/fuzz/corpus/backup_roundtrip/3c49eff7d2e536583784d4b018eec583d3173c93 new file mode 100644 index 0000000..0a03c38 Binary files /dev/null and b/fuzz/corpus/backup_roundtrip/3c49eff7d2e536583784d4b018eec583d3173c93 differ diff --git a/fuzz/corpus/backup_roundtrip/3cedf42c03a95e8e3a880559b370525543e1b324 b/fuzz/corpus/backup_roundtrip/3cedf42c03a95e8e3a880559b370525543e1b324 new file mode 100644 index 0000000..d717825 --- /dev/null +++ b/fuzz/corpus/backup_roundtrip/3cedf42c03a95e8e3a880559b370525543e1b324 @@ -0,0 +1 @@ +à \ No newline at end of file diff --git a/fuzz/corpus/backup_roundtrip/3e0ba38c0e772f30cd4dc2ba9c0c86156b20ff8f b/fuzz/corpus/backup_roundtrip/3e0ba38c0e772f30cd4dc2ba9c0c86156b20ff8f new file mode 100644 index 0000000..bb413e2 --- /dev/null +++ b/fuzz/corpus/backup_roundtrip/3e0ba38c0e772f30cd4dc2ba9c0c86156b20ff8f @@ -0,0 +1 @@ +YYYYo#ÿ:*: \ No newline at end of file diff --git a/fuzz/corpus/backup_roundtrip/3f103388f76aedfe6e3d84212154a7e2d2328d08 b/fuzz/corpus/backup_roundtrip/3f103388f76aedfe6e3d84212154a7e2d2328d08 new file mode 100644 index 0000000..862b03e --- /dev/null +++ b/fuzz/corpus/backup_roundtrip/3f103388f76aedfe6e3d84212154a7e2d2328d08 @@ -0,0 +1 @@ +RRRRRRRRR.RRRJRR4 \ No newline at end of file diff --git a/fuzz/corpus/backup_roundtrip/4075570331c964ffcfe40237c1a67fcb2e022ae3 b/fuzz/corpus/backup_roundtrip/4075570331c964ffcfe40237c1a67fcb2e022ae3 new file mode 100644 index 0000000..405f6f8 --- /dev/null +++ b/fuzz/corpus/backup_roundtrip/4075570331c964ffcfe40237c1a67fcb2e022ae3 @@ -0,0 +1 @@ +#ø#ø#ø \ No newline at end of file diff --git a/fuzz/corpus/backup_roundtrip/426f8bfcf1f135e9cb0fac2a2bec862474583dbd b/fuzz/corpus/backup_roundtrip/426f8bfcf1f135e9cb0fac2a2bec862474583dbd new file mode 100644 index 0000000..053e80c Binary files /dev/null and b/fuzz/corpus/backup_roundtrip/426f8bfcf1f135e9cb0fac2a2bec862474583dbd differ diff --git a/fuzz/corpus/backup_roundtrip/4359ece2bf96771557a783e54f14f985349cc3e2 b/fuzz/corpus/backup_roundtrip/4359ece2bf96771557a783e54f14f985349cc3e2 new file mode 100644 index 0000000..3afd690 Binary files /dev/null and b/fuzz/corpus/backup_roundtrip/4359ece2bf96771557a783e54f14f985349cc3e2 differ diff --git a/fuzz/corpus/backup_roundtrip/43d1b6363769af9504536fd705a787b333150c8d b/fuzz/corpus/backup_roundtrip/43d1b6363769af9504536fd705a787b333150c8d new file mode 100644 index 0000000..ba58dcb Binary files /dev/null and b/fuzz/corpus/backup_roundtrip/43d1b6363769af9504536fd705a787b333150c8d differ diff --git a/fuzz/corpus/backup_roundtrip/4413ff48e04a4cb2ff59d28f85cadf92bbeb27e4 b/fuzz/corpus/backup_roundtrip/4413ff48e04a4cb2ff59d28f85cadf92bbeb27e4 new file mode 100644 index 0000000..d3eee62 Binary files /dev/null and b/fuzz/corpus/backup_roundtrip/4413ff48e04a4cb2ff59d28f85cadf92bbeb27e4 differ diff --git a/fuzz/corpus/backup_roundtrip/4d751776e559e8157cd11c3d0a02d4e8eb1ef88b b/fuzz/corpus/backup_roundtrip/4d751776e559e8157cd11c3d0a02d4e8eb1ef88b new file mode 100644 index 0000000..e238785 Binary files /dev/null and b/fuzz/corpus/backup_roundtrip/4d751776e559e8157cd11c3d0a02d4e8eb1ef88b differ diff --git a/fuzz/corpus/backup_roundtrip/4e4ea65be63cdf1f663ca2e464a1bd5611d4596b b/fuzz/corpus/backup_roundtrip/4e4ea65be63cdf1f663ca2e464a1bd5611d4596b new file mode 100644 index 0000000..406df85 --- /dev/null +++ b/fuzz/corpus/backup_roundtrip/4e4ea65be63cdf1f663ca2e464a1bd5611d4596b @@ -0,0 +1 @@ +? diff --git a/fuzz/corpus/backup_roundtrip/4fe538f83835fb2d8a67e52c77fbcc6f8e951303 b/fuzz/corpus/backup_roundtrip/4fe538f83835fb2d8a67e52c77fbcc6f8e951303 new file mode 100644 index 0000000..96e10a2 Binary files /dev/null and b/fuzz/corpus/backup_roundtrip/4fe538f83835fb2d8a67e52c77fbcc6f8e951303 differ diff --git a/fuzz/corpus/backup_roundtrip/512e07326c6cf3a7c598e0ba1c8bfd17eb37cc7c b/fuzz/corpus/backup_roundtrip/512e07326c6cf3a7c598e0ba1c8bfd17eb37cc7c new file mode 100644 index 0000000..c5ec1bb --- /dev/null +++ b/fuzz/corpus/backup_roundtrip/512e07326c6cf3a7c598e0ba1c8bfd17eb37cc7c @@ -0,0 +1 @@ + diff --git a/fuzz/corpus/backup_roundtrip/528a6960fee133d18f29f36edb80d28b1495805d b/fuzz/corpus/backup_roundtrip/528a6960fee133d18f29f36edb80d28b1495805d new file mode 100644 index 0000000..96fbbc7 --- /dev/null +++ b/fuzz/corpus/backup_roundtrip/528a6960fee133d18f29f36edb80d28b1495805d @@ -0,0 +1 @@ +^¸µG# \ No newline at end of file diff --git a/fuzz/corpus/backup_roundtrip/52a719f9d01e6a1882f97bc011e52c80f807e955 b/fuzz/corpus/backup_roundtrip/52a719f9d01e6a1882f97bc011e52c80f807e955 new file mode 100644 index 0000000..df3d213 --- /dev/null +++ b/fuzz/corpus/backup_roundtrip/52a719f9d01e6a1882f97bc011e52c80f807e955 @@ -0,0 +1 @@ +˜ \ No newline at end of file diff --git a/fuzz/corpus/backup_roundtrip/52da4b5960b203f3a0651f00da153cdb197f7925 b/fuzz/corpus/backup_roundtrip/52da4b5960b203f3a0651f00da153cdb197f7925 new file mode 100644 index 0000000..1f431c9 Binary files /dev/null and b/fuzz/corpus/backup_roundtrip/52da4b5960b203f3a0651f00da153cdb197f7925 differ diff --git a/fuzz/corpus/backup_roundtrip/57f31bbcbea154085738569737c2f04e8861c3fd b/fuzz/corpus/backup_roundtrip/57f31bbcbea154085738569737c2f04e8861c3fd new file mode 100644 index 0000000..2ce8c49 Binary files /dev/null and b/fuzz/corpus/backup_roundtrip/57f31bbcbea154085738569737c2f04e8861c3fd differ diff --git a/fuzz/corpus/backup_roundtrip/584931419cc9a74b0a63855918ce225b42cf8f98 b/fuzz/corpus/backup_roundtrip/584931419cc9a74b0a63855918ce225b42cf8f98 new file mode 100644 index 0000000..133b413 Binary files /dev/null and b/fuzz/corpus/backup_roundtrip/584931419cc9a74b0a63855918ce225b42cf8f98 differ diff --git a/fuzz/corpus/backup_roundtrip/5966d1891aaa30a9985e25a816f16b226593a91e b/fuzz/corpus/backup_roundtrip/5966d1891aaa30a9985e25a816f16b226593a91e new file mode 100644 index 0000000..f4f151f Binary files /dev/null and b/fuzz/corpus/backup_roundtrip/5966d1891aaa30a9985e25a816f16b226593a91e differ diff --git a/fuzz/corpus/backup_roundtrip/5b6dd333ba7b333c804ce80a657150b5735bd881 b/fuzz/corpus/backup_roundtrip/5b6dd333ba7b333c804ce80a657150b5735bd881 new file mode 100644 index 0000000..3de39c7 --- /dev/null +++ b/fuzz/corpus/backup_roundtrip/5b6dd333ba7b333c804ce80a657150b5735bd881 @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/fuzz/corpus/backup_roundtrip/5e55fb95abcb756721b21bfadb77c2053e0fa913 b/fuzz/corpus/backup_roundtrip/5e55fb95abcb756721b21bfadb77c2053e0fa913 new file mode 100644 index 0000000..3695ae0 --- /dev/null +++ b/fuzz/corpus/backup_roundtrip/5e55fb95abcb756721b21bfadb77c2053e0fa913 @@ -0,0 +1 @@ +? \ No newline at end of file diff --git a/fuzz/corpus/backup_roundtrip/606d08c55e3a27356326d9ac3b268d7b90d7b8d0 b/fuzz/corpus/backup_roundtrip/606d08c55e3a27356326d9ac3b268d7b90d7b8d0 new file mode 100644 index 0000000..62dd736 --- /dev/null +++ b/fuzz/corpus/backup_roundtrip/606d08c55e3a27356326d9ac3b268d7b90d7b8d0 @@ -0,0 +1 @@ +ïþÿ°; \ No newline at end of file diff --git a/fuzz/corpus/backup_roundtrip/61cb6970f84fa19ac7e63645cdad4e8adb295143 b/fuzz/corpus/backup_roundtrip/61cb6970f84fa19ac7e63645cdad4e8adb295143 new file mode 100644 index 0000000..00b1bad Binary files /dev/null and b/fuzz/corpus/backup_roundtrip/61cb6970f84fa19ac7e63645cdad4e8adb295143 differ diff --git a/fuzz/corpus/backup_roundtrip/62d84a8a7963c991c97b17ed83243fa9da665781 b/fuzz/corpus/backup_roundtrip/62d84a8a7963c991c97b17ed83243fa9da665781 new file mode 100644 index 0000000..3ae7dc1 Binary files /dev/null and b/fuzz/corpus/backup_roundtrip/62d84a8a7963c991c97b17ed83243fa9da665781 differ diff --git a/fuzz/corpus/backup_roundtrip/642c5d3fb55f87d2873f89b1ab9a3890a6528d62 b/fuzz/corpus/backup_roundtrip/642c5d3fb55f87d2873f89b1ab9a3890a6528d62 new file mode 100644 index 0000000..0a71a62 Binary files /dev/null and b/fuzz/corpus/backup_roundtrip/642c5d3fb55f87d2873f89b1ab9a3890a6528d62 differ diff --git a/fuzz/corpus/backup_roundtrip/668a73857146391ad0c9cea3ed52f174db2809c1 b/fuzz/corpus/backup_roundtrip/668a73857146391ad0c9cea3ed52f174db2809c1 new file mode 100644 index 0000000..5f44d48 Binary files /dev/null and b/fuzz/corpus/backup_roundtrip/668a73857146391ad0c9cea3ed52f174db2809c1 differ diff --git a/fuzz/corpus/backup_roundtrip/6845d20d042b3d863f972547c38648ccf70a19c4 b/fuzz/corpus/backup_roundtrip/6845d20d042b3d863f972547c38648ccf70a19c4 new file mode 100644 index 0000000..5fd922a Binary files /dev/null and b/fuzz/corpus/backup_roundtrip/6845d20d042b3d863f972547c38648ccf70a19c4 differ diff --git a/fuzz/corpus/backup_roundtrip/6851bd83a1c5ee8f44421bf5a2c42388d83dd6f8 b/fuzz/corpus/backup_roundtrip/6851bd83a1c5ee8f44421bf5a2c42388d83dd6f8 new file mode 100644 index 0000000..a1a440b Binary files /dev/null and b/fuzz/corpus/backup_roundtrip/6851bd83a1c5ee8f44421bf5a2c42388d83dd6f8 differ diff --git a/fuzz/corpus/backup_roundtrip/6acfd663830de54a5d707831cf4c5e962a62778e b/fuzz/corpus/backup_roundtrip/6acfd663830de54a5d707831cf4c5e962a62778e new file mode 100644 index 0000000..bec856f --- /dev/null +++ b/fuzz/corpus/backup_roundtrip/6acfd663830de54a5d707831cf4c5e962a62778e @@ -0,0 +1 @@ +2ü \ No newline at end of file diff --git a/fuzz/corpus/backup_roundtrip/6b2f6a4b6578438e7a05b64b404ba8fbc31ae3a8 b/fuzz/corpus/backup_roundtrip/6b2f6a4b6578438e7a05b64b404ba8fbc31ae3a8 new file mode 100644 index 0000000..c271fe5 Binary files /dev/null and b/fuzz/corpus/backup_roundtrip/6b2f6a4b6578438e7a05b64b404ba8fbc31ae3a8 differ diff --git a/fuzz/corpus/backup_roundtrip/6e28ab0c7668f84eabaf45986c639a96eec56b2d b/fuzz/corpus/backup_roundtrip/6e28ab0c7668f84eabaf45986c639a96eec56b2d new file mode 100644 index 0000000..b2ab8de --- /dev/null +++ b/fuzz/corpus/backup_roundtrip/6e28ab0c7668f84eabaf45986c639a96eec56b2d @@ -0,0 +1 @@ +( \ No newline at end of file diff --git a/fuzz/corpus/backup_roundtrip/6e32f6c9f14717fe7bd9679f3151a40e93575b4b b/fuzz/corpus/backup_roundtrip/6e32f6c9f14717fe7bd9679f3151a40e93575b4b new file mode 100644 index 0000000..2a671a4 Binary files /dev/null and b/fuzz/corpus/backup_roundtrip/6e32f6c9f14717fe7bd9679f3151a40e93575b4b differ diff --git a/fuzz/corpus/backup_roundtrip/71853c6197a6a7f222db0f1978c7cb232b87c5ee b/fuzz/corpus/backup_roundtrip/71853c6197a6a7f222db0f1978c7cb232b87c5ee new file mode 100644 index 0000000..139597f --- /dev/null +++ b/fuzz/corpus/backup_roundtrip/71853c6197a6a7f222db0f1978c7cb232b87c5ee @@ -0,0 +1,2 @@ + + diff --git a/fuzz/corpus/backup_roundtrip/74cd6ea771c205e76e167653937e851ccd01a6fd b/fuzz/corpus/backup_roundtrip/74cd6ea771c205e76e167653937e851ccd01a6fd new file mode 100644 index 0000000..0555d41 Binary files /dev/null and b/fuzz/corpus/backup_roundtrip/74cd6ea771c205e76e167653937e851ccd01a6fd differ diff --git a/fuzz/corpus/backup_roundtrip/75d586e6bbfc42dcf869fbf1b0de196c4761c5de b/fuzz/corpus/backup_roundtrip/75d586e6bbfc42dcf869fbf1b0de196c4761c5de new file mode 100644 index 0000000..f7cf475 Binary files /dev/null and b/fuzz/corpus/backup_roundtrip/75d586e6bbfc42dcf869fbf1b0de196c4761c5de differ diff --git a/fuzz/corpus/backup_roundtrip/77009a6085435b62ef92c6f1d5b343e9cc06e080 b/fuzz/corpus/backup_roundtrip/77009a6085435b62ef92c6f1d5b343e9cc06e080 new file mode 100644 index 0000000..ce5908e Binary files /dev/null and b/fuzz/corpus/backup_roundtrip/77009a6085435b62ef92c6f1d5b343e9cc06e080 differ diff --git a/fuzz/corpus/backup_roundtrip/77ce0377defbd11b77b1f4ad54ca40ea5ef28490 b/fuzz/corpus/backup_roundtrip/77ce0377defbd11b77b1f4ad54ca40ea5ef28490 new file mode 100644 index 0000000..ae1b13f Binary files /dev/null and b/fuzz/corpus/backup_roundtrip/77ce0377defbd11b77b1f4ad54ca40ea5ef28490 differ diff --git a/fuzz/corpus/backup_roundtrip/785c30dd5c81882f90c41c51df628445f0e0929e b/fuzz/corpus/backup_roundtrip/785c30dd5c81882f90c41c51df628445f0e0929e new file mode 100644 index 0000000..fe69ec0 --- /dev/null +++ b/fuzz/corpus/backup_roundtrip/785c30dd5c81882f90c41c51df628445f0e0929e @@ -0,0 +1 @@ +€ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ \ No newline at end of file diff --git a/fuzz/corpus/backup_roundtrip/788ffe80ba52ac35784a978677f4e202034a4d0c b/fuzz/corpus/backup_roundtrip/788ffe80ba52ac35784a978677f4e202034a4d0c new file mode 100644 index 0000000..7120d24 --- /dev/null +++ b/fuzz/corpus/backup_roundtrip/788ffe80ba52ac35784a978677f4e202034a4d0c @@ -0,0 +1 @@ +(,.,. \ No newline at end of file diff --git a/fuzz/corpus/backup_roundtrip/7992d7ed3aae27204896feddcdb2e614a0e923bd b/fuzz/corpus/backup_roundtrip/7992d7ed3aae27204896feddcdb2e614a0e923bd new file mode 100644 index 0000000..60666bc --- /dev/null +++ b/fuzz/corpus/backup_roundtrip/7992d7ed3aae27204896feddcdb2e614a0e923bd @@ -0,0 +1 @@ +#ü# \ No newline at end of file diff --git a/fuzz/corpus/backup_roundtrip/7ae9d3a87a851febe01f3b22cc1a5d93b252c458 b/fuzz/corpus/backup_roundtrip/7ae9d3a87a851febe01f3b22cc1a5d93b252c458 new file mode 100644 index 0000000..b8b4294 --- /dev/null +++ b/fuzz/corpus/backup_roundtrip/7ae9d3a87a851febe01f3b22cc1a5d93b252c458 @@ -0,0 +1 @@ +:* \ No newline at end of file diff --git a/fuzz/corpus/backup_roundtrip/7e0e5bf6bfe7e8b9ff63847137cdf3da542ba61a b/fuzz/corpus/backup_roundtrip/7e0e5bf6bfe7e8b9ff63847137cdf3da542ba61a new file mode 100644 index 0000000..e6a5314 Binary files /dev/null and b/fuzz/corpus/backup_roundtrip/7e0e5bf6bfe7e8b9ff63847137cdf3da542ba61a differ diff --git a/fuzz/corpus/backup_roundtrip/81674b942a99a418107956520fc5ccf33d51572b b/fuzz/corpus/backup_roundtrip/81674b942a99a418107956520fc5ccf33d51572b new file mode 100644 index 0000000..c0b2a3e Binary files /dev/null and b/fuzz/corpus/backup_roundtrip/81674b942a99a418107956520fc5ccf33d51572b differ diff --git a/fuzz/corpus/backup_roundtrip/829e4032a7a2d435c86fa85bd46ec2025730ca69 b/fuzz/corpus/backup_roundtrip/829e4032a7a2d435c86fa85bd46ec2025730ca69 new file mode 100644 index 0000000..b82f3e7 Binary files /dev/null and b/fuzz/corpus/backup_roundtrip/829e4032a7a2d435c86fa85bd46ec2025730ca69 differ diff --git a/fuzz/corpus/backup_roundtrip/8379666a3f6db52fb1b873b9bd401d2a7c4be35b b/fuzz/corpus/backup_roundtrip/8379666a3f6db52fb1b873b9bd401d2a7c4be35b new file mode 100644 index 0000000..2404e5a Binary files /dev/null and b/fuzz/corpus/backup_roundtrip/8379666a3f6db52fb1b873b9bd401d2a7c4be35b differ diff --git a/fuzz/corpus/backup_roundtrip/8a68633b1cb42641b7bc6709ac92b08b7ec07056 b/fuzz/corpus/backup_roundtrip/8a68633b1cb42641b7bc6709ac92b08b7ec07056 new file mode 100644 index 0000000..9fb8d10 --- /dev/null +++ b/fuzz/corpus/backup_roundtrip/8a68633b1cb42641b7bc6709ac92b08b7ec07056 @@ -0,0 +1 @@ +ôü? \ No newline at end of file diff --git a/fuzz/corpus/backup_roundtrip/8ba7fa1a38dbf1557792368b8e72f751a380bc1e b/fuzz/corpus/backup_roundtrip/8ba7fa1a38dbf1557792368b8e72f751a380bc1e new file mode 100644 index 0000000..9b01e0f Binary files /dev/null and b/fuzz/corpus/backup_roundtrip/8ba7fa1a38dbf1557792368b8e72f751a380bc1e differ diff --git a/fuzz/corpus/backup_roundtrip/8bed8ca867a8502dcffaaae94f81b81c9ed30f0f b/fuzz/corpus/backup_roundtrip/8bed8ca867a8502dcffaaae94f81b81c9ed30f0f new file mode 100644 index 0000000..358f3d2 Binary files /dev/null and b/fuzz/corpus/backup_roundtrip/8bed8ca867a8502dcffaaae94f81b81c9ed30f0f differ diff --git a/fuzz/corpus/backup_roundtrip/8dd247113681fdfd089314e60f382b3458099951 b/fuzz/corpus/backup_roundtrip/8dd247113681fdfd089314e60f382b3458099951 new file mode 100644 index 0000000..a7e27d6 --- /dev/null +++ b/fuzz/corpus/backup_roundtrip/8dd247113681fdfd089314e60f382b3458099951 @@ -0,0 +1 @@ +ïþÿ;¦; \ No newline at end of file diff --git a/fuzz/corpus/backup_roundtrip/9159cb8bcee7fcb95582f140960cdae72788d326 b/fuzz/corpus/backup_roundtrip/9159cb8bcee7fcb95582f140960cdae72788d326 new file mode 100644 index 0000000..40fdece --- /dev/null +++ b/fuzz/corpus/backup_roundtrip/9159cb8bcee7fcb95582f140960cdae72788d326 @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/fuzz/corpus/backup_roundtrip/91be66245ffc01a429a7e4ad28274ab30acf5dd4 b/fuzz/corpus/backup_roundtrip/91be66245ffc01a429a7e4ad28274ab30acf5dd4 new file mode 100644 index 0000000..c1c5845 --- /dev/null +++ b/fuzz/corpus/backup_roundtrip/91be66245ffc01a429a7e4ad28274ab30acf5dd4 @@ -0,0 +1 @@ +ÿ:*: \ No newline at end of file diff --git a/fuzz/corpus/backup_roundtrip/91cfe05ccf305fd54cd2470abfccbf44feefe543 b/fuzz/corpus/backup_roundtrip/91cfe05ccf305fd54cd2470abfccbf44feefe543 new file mode 100644 index 0000000..17af4ca --- /dev/null +++ b/fuzz/corpus/backup_roundtrip/91cfe05ccf305fd54cd2470abfccbf44feefe543 @@ -0,0 +1 @@ +Ü \ No newline at end of file diff --git a/fuzz/corpus/backup_roundtrip/987194c88d1c88aec074cb463686c09555d60286 b/fuzz/corpus/backup_roundtrip/987194c88d1c88aec074cb463686c09555d60286 new file mode 100644 index 0000000..070b0c8 --- /dev/null +++ b/fuzz/corpus/backup_roundtrip/987194c88d1c88aec074cb463686c09555d60286 @@ -0,0 +1 @@ +qÿÿqqqqqqqqqŽôØÿÿÿÿ \ No newline at end of file diff --git a/fuzz/corpus/backup_roundtrip/9a78211436f6d425ec38f5c4e02270801f3524f8 b/fuzz/corpus/backup_roundtrip/9a78211436f6d425ec38f5c4e02270801f3524f8 new file mode 100644 index 0000000..b516b2c --- /dev/null +++ b/fuzz/corpus/backup_roundtrip/9a78211436f6d425ec38f5c4e02270801f3524f8 @@ -0,0 +1 @@ +@ \ No newline at end of file diff --git a/fuzz/corpus/backup_roundtrip/9a9b1ced5cbeb23b9a7a436e3c4c2a4978aa912c b/fuzz/corpus/backup_roundtrip/9a9b1ced5cbeb23b9a7a436e3c4c2a4978aa912c new file mode 100644 index 0000000..554c2e1 --- /dev/null +++ b/fuzz/corpus/backup_roundtrip/9a9b1ced5cbeb23b9a7a436e3c4c2a4978aa912c @@ -0,0 +1 @@ +ÿ;ýOþÄ#ü#üGWD \ No newline at end of file diff --git a/fuzz/corpus/backup_roundtrip/9ac8792078da533f300de095464a3815abab3146 b/fuzz/corpus/backup_roundtrip/9ac8792078da533f300de095464a3815abab3146 new file mode 100644 index 0000000..a19acca --- /dev/null +++ b/fuzz/corpus/backup_roundtrip/9ac8792078da533f300de095464a3815abab3146 @@ -0,0 +1 @@ +ìõïþ*ÿ° \ No newline at end of file diff --git a/fuzz/corpus/backup_roundtrip/9d4dda65871caa0b0c0040c054abd41c00096733 b/fuzz/corpus/backup_roundtrip/9d4dda65871caa0b0c0040c054abd41c00096733 new file mode 100644 index 0000000..9bed605 Binary files /dev/null and b/fuzz/corpus/backup_roundtrip/9d4dda65871caa0b0c0040c054abd41c00096733 differ diff --git a/fuzz/corpus/backup_roundtrip/9dd43e92cb5f675dde987fe23df3b505d4b66fab b/fuzz/corpus/backup_roundtrip/9dd43e92cb5f675dde987fe23df3b505d4b66fab new file mode 100644 index 0000000..e64c235 Binary files /dev/null and b/fuzz/corpus/backup_roundtrip/9dd43e92cb5f675dde987fe23df3b505d4b66fab differ diff --git a/fuzz/corpus/backup_roundtrip/9f511931cf34e1ffb681c58306a5a7475a8fcc88 b/fuzz/corpus/backup_roundtrip/9f511931cf34e1ffb681c58306a5a7475a8fcc88 new file mode 100644 index 0000000..fd097d2 Binary files /dev/null and b/fuzz/corpus/backup_roundtrip/9f511931cf34e1ffb681c58306a5a7475a8fcc88 differ diff --git a/fuzz/corpus/backup_roundtrip/9f730e87a0e47fef76edddf2be02bbb6f3843ae2 b/fuzz/corpus/backup_roundtrip/9f730e87a0e47fef76edddf2be02bbb6f3843ae2 new file mode 100644 index 0000000..afdb83d Binary files /dev/null and b/fuzz/corpus/backup_roundtrip/9f730e87a0e47fef76edddf2be02bbb6f3843ae2 differ diff --git a/fuzz/corpus/backup_roundtrip/a96e542745a7b5a705eaa953a6e7d62447e19805 b/fuzz/corpus/backup_roundtrip/a96e542745a7b5a705eaa953a6e7d62447e19805 new file mode 100644 index 0000000..ecbc279 Binary files /dev/null and b/fuzz/corpus/backup_roundtrip/a96e542745a7b5a705eaa953a6e7d62447e19805 differ diff --git a/fuzz/corpus/backup_roundtrip/ab461f6b8a6842a473257a2561c1fbdf91bdfe77 b/fuzz/corpus/backup_roundtrip/ab461f6b8a6842a473257a2561c1fbdf91bdfe77 new file mode 100644 index 0000000..0f0f3e3 --- /dev/null +++ b/fuzz/corpus/backup_roundtrip/ab461f6b8a6842a473257a2561c1fbdf91bdfe77 @@ -0,0 +1 @@ +ü \ No newline at end of file diff --git a/fuzz/corpus/backup_roundtrip/acb7846b378126240c4c1df45e3bff4f467879d2 b/fuzz/corpus/backup_roundtrip/acb7846b378126240c4c1df45e3bff4f467879d2 new file mode 100644 index 0000000..07ac97b --- /dev/null +++ b/fuzz/corpus/backup_roundtrip/acb7846b378126240c4c1df45e3bff4f467879d2 @@ -0,0 +1 @@ + diff --git a/fuzz/corpus/backup_roundtrip/aea09bb502802c9e49e0e082bbeb6cddf1c1b619 b/fuzz/corpus/backup_roundtrip/aea09bb502802c9e49e0e082bbeb6cddf1c1b619 new file mode 100644 index 0000000..68c3dbb Binary files /dev/null and b/fuzz/corpus/backup_roundtrip/aea09bb502802c9e49e0e082bbeb6cddf1c1b619 differ diff --git a/fuzz/corpus/backup_roundtrip/b0d8b474467ef0cf2c4b357185423096289a24c5 b/fuzz/corpus/backup_roundtrip/b0d8b474467ef0cf2c4b357185423096289a24c5 new file mode 100644 index 0000000..6e0db8e --- /dev/null +++ b/fuzz/corpus/backup_roundtrip/b0d8b474467ef0cf2c4b357185423096289a24c5 @@ -0,0 +1 @@ +; \ No newline at end of file diff --git a/fuzz/corpus/backup_roundtrip/b48f491783e98de10682f2d4455dfce5bdc3c233 b/fuzz/corpus/backup_roundtrip/b48f491783e98de10682f2d4455dfce5bdc3c233 new file mode 100644 index 0000000..3a6e607 --- /dev/null +++ b/fuzz/corpus/backup_roundtrip/b48f491783e98de10682f2d4455dfce5bdc3c233 @@ -0,0 +1 @@ +ô \ No newline at end of file diff --git a/fuzz/corpus/backup_roundtrip/bb9a91283973fc411bab48af18fa7d99a736f699 b/fuzz/corpus/backup_roundtrip/bb9a91283973fc411bab48af18fa7d99a736f699 new file mode 100644 index 0000000..f74c4ec --- /dev/null +++ b/fuzz/corpus/backup_roundtrip/bb9a91283973fc411bab48af18fa7d99a736f699 @@ -0,0 +1 @@ +ü@¨' \ No newline at end of file diff --git a/fuzz/corpus/backup_roundtrip/bce5569a802b7234f56b4c81344a702e2283d26f b/fuzz/corpus/backup_roundtrip/bce5569a802b7234f56b4c81344a702e2283d26f new file mode 100644 index 0000000..ca5034c Binary files /dev/null and b/fuzz/corpus/backup_roundtrip/bce5569a802b7234f56b4c81344a702e2283d26f differ diff --git a/fuzz/corpus/backup_roundtrip/bed14a1dc4e6111e0da227dd5b08d20a16a03dad b/fuzz/corpus/backup_roundtrip/bed14a1dc4e6111e0da227dd5b08d20a16a03dad new file mode 100644 index 0000000..96f9409 Binary files /dev/null and b/fuzz/corpus/backup_roundtrip/bed14a1dc4e6111e0da227dd5b08d20a16a03dad differ diff --git a/fuzz/corpus/backup_roundtrip/bf8b4530d8d246dd74ac53a13471bba17941dff7 b/fuzz/corpus/backup_roundtrip/bf8b4530d8d246dd74ac53a13471bba17941dff7 new file mode 100644 index 0000000..6b2aaa7 --- /dev/null +++ b/fuzz/corpus/backup_roundtrip/bf8b4530d8d246dd74ac53a13471bba17941dff7 @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/fuzz/corpus/backup_roundtrip/c09aef9f45c0639bc2e49feea98a9449f2b42001 b/fuzz/corpus/backup_roundtrip/c09aef9f45c0639bc2e49feea98a9449f2b42001 new file mode 100644 index 0000000..ce1e8b1 --- /dev/null +++ b/fuzz/corpus/backup_roundtrip/c09aef9f45c0639bc2e49feea98a9449f2b42001 @@ -0,0 +1 @@ +2ô \ No newline at end of file diff --git a/fuzz/corpus/backup_roundtrip/c1fdffd67e96e5d4c0f4f2f2afd9d8af8d13a509 b/fuzz/corpus/backup_roundtrip/c1fdffd67e96e5d4c0f4f2f2afd9d8af8d13a509 new file mode 100644 index 0000000..64e6412 Binary files /dev/null and b/fuzz/corpus/backup_roundtrip/c1fdffd67e96e5d4c0f4f2f2afd9d8af8d13a509 differ diff --git a/fuzz/corpus/backup_roundtrip/c398a1d6e7744204c82f7103c55e437ee0522fb3 b/fuzz/corpus/backup_roundtrip/c398a1d6e7744204c82f7103c55e437ee0522fb3 new file mode 100644 index 0000000..690bf0a Binary files /dev/null and b/fuzz/corpus/backup_roundtrip/c398a1d6e7744204c82f7103c55e437ee0522fb3 differ diff --git a/fuzz/corpus/backup_roundtrip/c39a5fabbf5d941ff6a356d2dba04e9f8e6e0789 b/fuzz/corpus/backup_roundtrip/c39a5fabbf5d941ff6a356d2dba04e9f8e6e0789 new file mode 100644 index 0000000..1e691ed Binary files /dev/null and b/fuzz/corpus/backup_roundtrip/c39a5fabbf5d941ff6a356d2dba04e9f8e6e0789 differ diff --git a/fuzz/corpus/backup_roundtrip/c3f8b81ac3ce712176f486809d06f4206f6d1c00 b/fuzz/corpus/backup_roundtrip/c3f8b81ac3ce712176f486809d06f4206f6d1c00 new file mode 100644 index 0000000..2578362 Binary files /dev/null and b/fuzz/corpus/backup_roundtrip/c3f8b81ac3ce712176f486809d06f4206f6d1c00 differ diff --git a/fuzz/corpus/backup_roundtrip/c61eedf38f9e2026fb936f314dd816ee28b82218 b/fuzz/corpus/backup_roundtrip/c61eedf38f9e2026fb936f314dd816ee28b82218 new file mode 100644 index 0000000..9f590fd Binary files /dev/null and b/fuzz/corpus/backup_roundtrip/c61eedf38f9e2026fb936f314dd816ee28b82218 differ diff --git a/fuzz/corpus/backup_roundtrip/c6a81894fe0ee6c20b60881e4a5af05bea4a01a2 b/fuzz/corpus/backup_roundtrip/c6a81894fe0ee6c20b60881e4a5af05bea4a01a2 new file mode 100644 index 0000000..fa7784d --- /dev/null +++ b/fuzz/corpus/backup_roundtrip/c6a81894fe0ee6c20b60881e4a5af05bea4a01a2 @@ -0,0 +1 @@ +ÿÿŽôØÿÿÿÿ \ No newline at end of file diff --git a/fuzz/corpus/backup_roundtrip/c8cc338c4f7247fcd6544b277a898f6ef7bbc08a b/fuzz/corpus/backup_roundtrip/c8cc338c4f7247fcd6544b277a898f6ef7bbc08a new file mode 100644 index 0000000..d93368b Binary files /dev/null and b/fuzz/corpus/backup_roundtrip/c8cc338c4f7247fcd6544b277a898f6ef7bbc08a differ diff --git a/fuzz/corpus/backup_roundtrip/c9f814aca47abf29f849367c4d8175fdd54342bd b/fuzz/corpus/backup_roundtrip/c9f814aca47abf29f849367c4d8175fdd54342bd new file mode 100644 index 0000000..60d663c Binary files /dev/null and b/fuzz/corpus/backup_roundtrip/c9f814aca47abf29f849367c4d8175fdd54342bd differ diff --git a/fuzz/corpus/backup_roundtrip/caf2be64e785a9672685a42a88e9a8a2bc252a00 b/fuzz/corpus/backup_roundtrip/caf2be64e785a9672685a42a88e9a8a2bc252a00 new file mode 100644 index 0000000..a5662bc Binary files /dev/null and b/fuzz/corpus/backup_roundtrip/caf2be64e785a9672685a42a88e9a8a2bc252a00 differ diff --git a/fuzz/corpus/backup_roundtrip/cb305244cedd8e3d262dc6b2b7f3868fefc61e76 b/fuzz/corpus/backup_roundtrip/cb305244cedd8e3d262dc6b2b7f3868fefc61e76 new file mode 100644 index 0000000..9b44ac9 --- /dev/null +++ b/fuzz/corpus/backup_roundtrip/cb305244cedd8e3d262dc6b2b7f3868fefc61e76 @@ -0,0 +1 @@ +þGGG \ No newline at end of file diff --git a/fuzz/corpus/backup_roundtrip/cc3b603f6ccc9479b814f96451649baae014d782 b/fuzz/corpus/backup_roundtrip/cc3b603f6ccc9479b814f96451649baae014d782 new file mode 100644 index 0000000..3a1132d Binary files /dev/null and b/fuzz/corpus/backup_roundtrip/cc3b603f6ccc9479b814f96451649baae014d782 differ diff --git a/fuzz/corpus/backup_roundtrip/cc94fed09010138232028de27209ef93a4e1acdc b/fuzz/corpus/backup_roundtrip/cc94fed09010138232028de27209ef93a4e1acdc new file mode 100644 index 0000000..d2c1536 Binary files /dev/null and b/fuzz/corpus/backup_roundtrip/cc94fed09010138232028de27209ef93a4e1acdc differ diff --git a/fuzz/corpus/backup_roundtrip/d08f88df745fa7950b104e4a707a31cfce7b5841 b/fuzz/corpus/backup_roundtrip/d08f88df745fa7950b104e4a707a31cfce7b5841 new file mode 100644 index 0000000..4287ca8 --- /dev/null +++ b/fuzz/corpus/backup_roundtrip/d08f88df745fa7950b104e4a707a31cfce7b5841 @@ -0,0 +1 @@ +# \ No newline at end of file diff --git a/fuzz/corpus/backup_roundtrip/d198281adfae04fda9608acdf45437b588ce7ec6 b/fuzz/corpus/backup_roundtrip/d198281adfae04fda9608acdf45437b588ce7ec6 new file mode 100644 index 0000000..6c522a3 --- /dev/null +++ b/fuzz/corpus/backup_roundtrip/d198281adfae04fda9608acdf45437b588ce7ec6 @@ -0,0 +1 @@ +L,. \ No newline at end of file diff --git a/fuzz/corpus/backup_roundtrip/d1f71f9492e870b14b8e32fc35611d20d7116fb6 b/fuzz/corpus/backup_roundtrip/d1f71f9492e870b14b8e32fc35611d20d7116fb6 new file mode 100644 index 0000000..4766691 Binary files /dev/null and b/fuzz/corpus/backup_roundtrip/d1f71f9492e870b14b8e32fc35611d20d7116fb6 differ diff --git a/fuzz/corpus/backup_roundtrip/d264f157ca1df350c982345235e494667ea115d4 b/fuzz/corpus/backup_roundtrip/d264f157ca1df350c982345235e494667ea115d4 new file mode 100644 index 0000000..03efd74 --- /dev/null +++ b/fuzz/corpus/backup_roundtrip/d264f157ca1df350c982345235e494667ea115d4 @@ -0,0 +1 @@ +ÄÄÄÄÄÄÄÄÄÄÄÄ \ No newline at end of file diff --git a/fuzz/corpus/backup_roundtrip/d2e9113109a23c9ada1c8c262d81a440de84099a b/fuzz/corpus/backup_roundtrip/d2e9113109a23c9ada1c8c262d81a440de84099a new file mode 100644 index 0000000..8fa0e95 Binary files /dev/null and b/fuzz/corpus/backup_roundtrip/d2e9113109a23c9ada1c8c262d81a440de84099a differ diff --git a/fuzz/corpus/backup_roundtrip/d56ddef3702dec9b11de617314aa04c6e5faf6de b/fuzz/corpus/backup_roundtrip/d56ddef3702dec9b11de617314aa04c6e5faf6de new file mode 100644 index 0000000..2c4c522 --- /dev/null +++ b/fuzz/corpus/backup_roundtrip/d56ddef3702dec9b11de617314aa04c6e5faf6de @@ -0,0 +1 @@ +ïþÿ;¦n \ No newline at end of file diff --git a/fuzz/corpus/backup_roundtrip/d648b57848620d1ebb56e24965247a956924070b b/fuzz/corpus/backup_roundtrip/d648b57848620d1ebb56e24965247a956924070b new file mode 100644 index 0000000..fe8e3a9 Binary files /dev/null and b/fuzz/corpus/backup_roundtrip/d648b57848620d1ebb56e24965247a956924070b differ diff --git a/fuzz/corpus/backup_roundtrip/d86bca9ccd60ee64ffef8627679c46419eb480b7 b/fuzz/corpus/backup_roundtrip/d86bca9ccd60ee64ffef8627679c46419eb480b7 new file mode 100644 index 0000000..f9b743a --- /dev/null +++ b/fuzz/corpus/backup_roundtrip/d86bca9ccd60ee64ffef8627679c46419eb480b7 @@ -0,0 +1 @@ +YYYYY# \ No newline at end of file diff --git a/fuzz/corpus/backup_roundtrip/da534ca7303b10df11df9081af797ee7750aad77 b/fuzz/corpus/backup_roundtrip/da534ca7303b10df11df9081af797ee7750aad77 new file mode 100644 index 0000000..193757b --- /dev/null +++ b/fuzz/corpus/backup_roundtrip/da534ca7303b10df11df9081af797ee7750aad77 @@ -0,0 +1 @@ +#ü#üGWD# \ No newline at end of file diff --git a/fuzz/corpus/backup_roundtrip/dcf138229d6789c73f7969dccd743ed882c8a4c1 b/fuzz/corpus/backup_roundtrip/dcf138229d6789c73f7969dccd743ed882c8a4c1 new file mode 100644 index 0000000..ed0c02b Binary files /dev/null and b/fuzz/corpus/backup_roundtrip/dcf138229d6789c73f7969dccd743ed882c8a4c1 differ diff --git a/fuzz/corpus/backup_roundtrip/dd679d555ae04cd2462a61ff4aad02a73b7eea7a b/fuzz/corpus/backup_roundtrip/dd679d555ae04cd2462a61ff4aad02a73b7eea7a new file mode 100644 index 0000000..3406b52 Binary files /dev/null and b/fuzz/corpus/backup_roundtrip/dd679d555ae04cd2462a61ff4aad02a73b7eea7a differ diff --git a/fuzz/corpus/backup_roundtrip/ddb9fdb16db21d1288cf39ac982926447a58f4c0 b/fuzz/corpus/backup_roundtrip/ddb9fdb16db21d1288cf39ac982926447a58f4c0 new file mode 100644 index 0000000..f18a939 --- /dev/null +++ b/fuzz/corpus/backup_roundtrip/ddb9fdb16db21d1288cf39ac982926447a58f4c0 @@ -0,0 +1 @@ +*:ÿ:*: \ No newline at end of file diff --git a/fuzz/corpus/backup_roundtrip/ddbc55fe4465fa9d69a9e4d888afd73c49f8867a b/fuzz/corpus/backup_roundtrip/ddbc55fe4465fa9d69a9e4d888afd73c49f8867a new file mode 100644 index 0000000..31dfd31 Binary files /dev/null and b/fuzz/corpus/backup_roundtrip/ddbc55fe4465fa9d69a9e4d888afd73c49f8867a differ diff --git a/fuzz/corpus/backup_roundtrip/e12eeb3c29d4e22d896e42af48ca8816dfadd3b8 b/fuzz/corpus/backup_roundtrip/e12eeb3c29d4e22d896e42af48ca8816dfadd3b8 new file mode 100644 index 0000000..be8086b Binary files /dev/null and b/fuzz/corpus/backup_roundtrip/e12eeb3c29d4e22d896e42af48ca8816dfadd3b8 differ diff --git a/fuzz/corpus/backup_roundtrip/e2901792677087494cb98a717b0a7e6179966413 b/fuzz/corpus/backup_roundtrip/e2901792677087494cb98a717b0a7e6179966413 new file mode 100644 index 0000000..34f94cb --- /dev/null +++ b/fuzz/corpus/backup_roundtrip/e2901792677087494cb98a717b0a7e6179966413 @@ -0,0 +1 @@ +RRRRRRRRR.RRRRRR4 \ No newline at end of file diff --git a/fuzz/corpus/backup_roundtrip/e47aea3140df9bcd504c1473af09ecc1030567f6 b/fuzz/corpus/backup_roundtrip/e47aea3140df9bcd504c1473af09ecc1030567f6 new file mode 100644 index 0000000..9b55fd6 --- /dev/null +++ b/fuzz/corpus/backup_roundtrip/e47aea3140df9bcd504c1473af09ecc1030567f6 @@ -0,0 +1 @@ +ô diff --git a/fuzz/corpus/backup_roundtrip/e51e40716d17fe17e7079ded7f2dea03e6d84c55 b/fuzz/corpus/backup_roundtrip/e51e40716d17fe17e7079ded7f2dea03e6d84c55 new file mode 100644 index 0000000..0d29526 --- /dev/null +++ b/fuzz/corpus/backup_roundtrip/e51e40716d17fe17e7079ded7f2dea03e6d84c55 @@ -0,0 +1 @@ +(( \ No newline at end of file diff --git a/fuzz/corpus/backup_roundtrip/e5bf41dcede48e9df626b852dd139c3f31ab8545 b/fuzz/corpus/backup_roundtrip/e5bf41dcede48e9df626b852dd139c3f31ab8545 new file mode 100644 index 0000000..376a925 Binary files /dev/null and b/fuzz/corpus/backup_roundtrip/e5bf41dcede48e9df626b852dd139c3f31ab8545 differ diff --git a/fuzz/corpus/backup_roundtrip/e5ca6bb6da524a1ce24ac678b1295090c8f642a1 b/fuzz/corpus/backup_roundtrip/e5ca6bb6da524a1ce24ac678b1295090c8f642a1 new file mode 100644 index 0000000..ab48ff6 --- /dev/null +++ b/fuzz/corpus/backup_roundtrip/e5ca6bb6da524a1ce24ac678b1295090c8f642a1 @@ -0,0 +1 @@ +¸GWD \ No newline at end of file diff --git a/fuzz/corpus/backup_roundtrip/e632b36853518cf2c86175a46d249c122f4fd9d6 b/fuzz/corpus/backup_roundtrip/e632b36853518cf2c86175a46d249c122f4fd9d6 new file mode 100644 index 0000000..f2ff5fb Binary files /dev/null and b/fuzz/corpus/backup_roundtrip/e632b36853518cf2c86175a46d249c122f4fd9d6 differ diff --git a/fuzz/corpus/backup_roundtrip/e910345c261713fff55aa46164aa2caa4851d2f9 b/fuzz/corpus/backup_roundtrip/e910345c261713fff55aa46164aa2caa4851d2f9 new file mode 100644 index 0000000..46a2156 --- /dev/null +++ b/fuzz/corpus/backup_roundtrip/e910345c261713fff55aa46164aa2caa4851d2f9 @@ -0,0 +1 @@ +#ü#üGÿWD# \ No newline at end of file diff --git a/fuzz/corpus/backup_roundtrip/eb55642c118d9f2eb6ccaaa7fa37b268da1834cc b/fuzz/corpus/backup_roundtrip/eb55642c118d9f2eb6ccaaa7fa37b268da1834cc new file mode 100644 index 0000000..2e9fa68 Binary files /dev/null and b/fuzz/corpus/backup_roundtrip/eb55642c118d9f2eb6ccaaa7fa37b268da1834cc differ diff --git a/fuzz/corpus/backup_roundtrip/ee504363e00c71f68e02722f0f07840bdf329510 b/fuzz/corpus/backup_roundtrip/ee504363e00c71f68e02722f0f07840bdf329510 new file mode 100644 index 0000000..ea6723f Binary files /dev/null and b/fuzz/corpus/backup_roundtrip/ee504363e00c71f68e02722f0f07840bdf329510 differ diff --git a/fuzz/corpus/backup_roundtrip/efc4d6f46a7eacd78889a1351e9a88fc7bfc9b17 b/fuzz/corpus/backup_roundtrip/efc4d6f46a7eacd78889a1351e9a88fc7bfc9b17 new file mode 100644 index 0000000..34d64e6 Binary files /dev/null and b/fuzz/corpus/backup_roundtrip/efc4d6f46a7eacd78889a1351e9a88fc7bfc9b17 differ diff --git a/fuzz/corpus/backup_roundtrip/f703cf00fe973daf9555cd026edb46e53de47856 b/fuzz/corpus/backup_roundtrip/f703cf00fe973daf9555cd026edb46e53de47856 new file mode 100644 index 0000000..4df209a --- /dev/null +++ b/fuzz/corpus/backup_roundtrip/f703cf00fe973daf9555cd026edb46e53de47856 @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/fuzz/corpus/backup_roundtrip/f7f48269dc8ca49d56f73068efca7574d07cb906 b/fuzz/corpus/backup_roundtrip/f7f48269dc8ca49d56f73068efca7574d07cb906 new file mode 100644 index 0000000..111206f Binary files /dev/null and b/fuzz/corpus/backup_roundtrip/f7f48269dc8ca49d56f73068efca7574d07cb906 differ diff --git a/fuzz/corpus/backup_roundtrip/f9b4b95bcd2519ee98574e85ab4158aba53fb5b5 b/fuzz/corpus/backup_roundtrip/f9b4b95bcd2519ee98574e85ab4158aba53fb5b5 new file mode 100644 index 0000000..6efd4dd --- /dev/null +++ b/fuzz/corpus/backup_roundtrip/f9b4b95bcd2519ee98574e85ab4158aba53fb5b5 @@ -0,0 +1 @@ +ŽôØ \ No newline at end of file diff --git a/fuzz/corpus/backup_roundtrip/fadeff742dc7ae024de664dd0e2539c9a6a4f156 b/fuzz/corpus/backup_roundtrip/fadeff742dc7ae024de664dd0e2539c9a6a4f156 new file mode 100644 index 0000000..d26d5b8 Binary files /dev/null and b/fuzz/corpus/backup_roundtrip/fadeff742dc7ae024de664dd0e2539c9a6a4f156 differ diff --git a/fuzz/corpus/backup_roundtrip/fc77d71e66d25af7069297909c80c0e949167809 b/fuzz/corpus/backup_roundtrip/fc77d71e66d25af7069297909c80c0e949167809 new file mode 100644 index 0000000..d9043bd Binary files /dev/null and b/fuzz/corpus/backup_roundtrip/fc77d71e66d25af7069297909c80c0e949167809 differ diff --git a/fuzz/corpus/backup_roundtrip/fc95a970ff582095ce54e1459b2694ef66ee93e9 b/fuzz/corpus/backup_roundtrip/fc95a970ff582095ce54e1459b2694ef66ee93e9 new file mode 100644 index 0000000..da53f17 Binary files /dev/null and b/fuzz/corpus/backup_roundtrip/fc95a970ff582095ce54e1459b2694ef66ee93e9 differ diff --git a/fuzz/corpus/backup_roundtrip/fd6f5aa90211853e795941406d2ad180c56b93c0 b/fuzz/corpus/backup_roundtrip/fd6f5aa90211853e795941406d2ad180c56b93c0 new file mode 100644 index 0000000..d809f01 Binary files /dev/null and b/fuzz/corpus/backup_roundtrip/fd6f5aa90211853e795941406d2ad180c56b93c0 differ diff --git a/fuzz/fuzz_targets/backup_roundtrip.rs b/fuzz/fuzz_targets/backup_roundtrip.rs new file mode 100644 index 0000000..0689710 --- /dev/null +++ b/fuzz/fuzz_targets/backup_roundtrip.rs @@ -0,0 +1,35 @@ +#![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); +});