{"id":13636731,"url":"https://github.com/zip-rs/zip2","last_synced_at":"2026-04-25T21:01:09.097Z","repository":{"id":154404455,"uuid":"631680896","full_name":"zip-rs/zip2","owner":"zip-rs","description":"Zip implementation in Rust","archived":false,"fork":false,"pushed_at":"2026-04-25T07:13:01.000Z","size":184969,"stargazers_count":308,"open_issues_count":62,"forks_count":106,"subscribers_count":4,"default_branch":"master","last_synced_at":"2026-04-25T09:06:17.821Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":"zip-rs/zip-old","license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/zip-rs.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2023-04-23T19:26:38.000Z","updated_at":"2026-04-23T23:48:17.000Z","dependencies_parsed_at":"2025-05-14T21:10:45.626Z","dependency_job_id":"926765f8-4d96-4c89-a7a7-8d9a5c932ef2","html_url":"https://github.com/zip-rs/zip2","commit_stats":{"total_commits":1826,"total_committers":108,"mean_commits":16.90740740740741,"dds":0.6801752464403067,"last_synced_commit":"06632924e81805742605cda313863b04dfaa1879"},"previous_names":["pr0methean/zip","zip-rs/zip2","pr0methean/zip-next"],"tags_count":69,"template":false,"template_full_name":null,"purl":"pkg:github/zip-rs/zip2","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zip-rs%2Fzip2","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zip-rs%2Fzip2/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zip-rs%2Fzip2/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zip-rs%2Fzip2/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/zip-rs","download_url":"https://codeload.github.com/zip-rs/zip2/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zip-rs%2Fzip2/sbom","scorecard":{"id":1242660,"data":{"date":"2026-01-30T06:57:16Z","repo":{"name":"github.com/zip-rs/zip2","commit":"0d606a7fbeac720ee6ce3029f91ac1a22383cfeb"},"scorecard":{"version":"v5.0.0","commit":"ea7e27ed41b76ab879c862fa0ca4cc9c61764ee4"},"score":6.9,"checks":[{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/ea7e27ed41b76ab879c862fa0ca4cc9c61764ee4/docs/checks.md#binary-artifacts"}},{"name":"Branch-Protection","score":1,"reason":"branch protection is not maximal on development and all release branches","details":["Info: 'allow deletion' disabled on branch 'master'","Warn: 'force pushes' enabled on branch 'master'","Warn: 'branch protection settings apply to administrators' is disable on branch 'master'","Info: 'stale review dismissal' is required to merge on branch 'master'","Warn: branch 'master' does not require approvers","Warn: codeowners review is required - but no codeowners file found in repo","Warn: 'last push approval' is disable on branch 'master'","Warn: 'up-to-date branches' is disable on branch 'master'","Info: status check found to merge onto on branch 'master'","Info: PRs are required in order to make changes on branch 'master'"],"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/ea7e27ed41b76ab879c862fa0ca4cc9c61764ee4/docs/checks.md#branch-protection"}},{"name":"CI-Tests","score":9,"reason":"20 out of 21 merged PRs checked by a CI test -- score normalized to 9","details":null,"documentation":{"short":"Determines if the project runs tests before pull requests are merged.","url":"https://github.com/ossf/scorecard/blob/ea7e27ed41b76ab879c862fa0ca4cc9c61764ee4/docs/checks.md#ci-tests"}},{"name":"CII-Best-Practices","score":2,"reason":"badge detected: InProgress","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/ea7e27ed41b76ab879c862fa0ca4cc9c61764ee4/docs/checks.md#cii-best-practices"}},{"name":"Code-Review","score":1,"reason":"Found 3/24 approved changesets -- score normalized to 1","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/ea7e27ed41b76ab879c862fa0ca4cc9c61764ee4/docs/checks.md#code-review"}},{"name":"Contributors","score":10,"reason":"project has 38 contributing companies or organizations","details":["Info: qu1x contributor org/company found, kft-telecom-paris contributor org/company found, misskey-dev contributor org/company found, vrc-get contributor org/company found, elokon gmbh contributor org/company found, acemod contributor org/company found, embed-rs contributor org/company found, openssh-rust contributor org/company found, comete-telecom-paris contributor org/company found, archlinux contributor org/company found, passagemath contributor org/company found, ggez contributor org/company found, ifgl contributor org/company found, Forum-Telecom-Paris contributor org/company found, cargo-bins contributor org/company found, tramex contributor org/company found, freedom-mod-development-community contributor org/company found, IDI-Systems contributor org/company found, zip-rs contributor org/company found, vrtbl contributor org/company found, search-opt-crew contributor org/company found, Bel-Art contributor org/company found, clekey contributor org/company found, EpicGames contributor org/company found, intercept contributor org/company found, vanderbiltigem contributor org/company found, 49nord contributor org/company found, rust-lang contributor org/company found, graphicsmagick-rs contributor org/company found, bds-telecom-paris contributor org/company found, fixrtm contributor org/company found, yabok contributor org/company found, CBATeam contributor org/company found, T-13 contributor org/company found, idi-systems contributor org/company found, cytopus contributor org/company found, snax-club contributor org/company found, Theseus-Aegis contributor org/company found, "],"documentation":{"short":"Determines if the project has a set of contributors from multiple organizations (e.g., companies).","url":"https://github.com/ossf/scorecard/blob/ea7e27ed41b76ab879c862fa0ca4cc9c61764ee4/docs/checks.md#contributors"}},{"name":"Dangerous-Workflow","score":10,"reason":"no dangerous workflow patterns detected","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/ea7e27ed41b76ab879c862fa0ca4cc9c61764ee4/docs/checks.md#dangerous-workflow"}},{"name":"Dependency-Update-Tool","score":10,"reason":"update tool detected","details":["Info: detected update tool: Dependabot: .github/dependabot.yml:1"],"documentation":{"short":"Determines if the project uses a dependency update tool.","url":"https://github.com/ossf/scorecard/blob/ea7e27ed41b76ab879c862fa0ca4cc9c61764ee4/docs/checks.md#dependency-update-tool"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/ea7e27ed41b76ab879c862fa0ca4cc9c61764ee4/docs/checks.md#fuzzing"}},{"name":"License","score":9,"reason":"license file detected","details":["Info: project has a license file: LICENSE:0","Warn: project license file does not contain an FSF or OSI license."],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/ea7e27ed41b76ab879c862fa0ca4cc9c61764ee4/docs/checks.md#license"}},{"name":"Maintained","score":10,"reason":"30 commit(s) and 17 issue activity found in the last 90 days -- score normalized to 10","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/ea7e27ed41b76ab879c862fa0ca4cc9c61764ee4/docs/checks.md#maintained"}},{"name":"Packaging","score":-1,"reason":"packaging workflow not detected","details":["Warn: no GitHub/GitLab publishing workflow detected."],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/ea7e27ed41b76ab879c862fa0ca4cc9c61764ee4/docs/checks.md#packaging"}},{"name":"Pinned-Dependencies","score":9,"reason":"dependency not pinned by hash detected -- score normalized to 9","details":["Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/auto_merge_prs.yml:17: update your workflow using https://app.stepsecurity.io/secureworkflow/zip-rs/zip2/auto_merge_prs.yml/master?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/auto_merge_prs.yml:24: update your workflow using https://app.stepsecurity.io/secureworkflow/zip-rs/zip2/auto_merge_prs.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/codeql.yml:61: update your workflow using https://app.stepsecurity.io/secureworkflow/zip-rs/zip2/codeql.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/codeql.yml:71: update your workflow using https://app.stepsecurity.io/secureworkflow/zip-rs/zip2/codeql.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/codeql.yml:99: update your workflow using https://app.stepsecurity.io/secureworkflow/zip-rs/zip2/codeql.yml/master?enable=pin","Info:  34 out of  38 GitHub-owned GitHubAction dependencies pinned","Info:  25 out of  26 third-party GitHubAction dependencies pinned"],"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/ea7e27ed41b76ab879c862fa0ca4cc9c61764ee4/docs/checks.md#pinned-dependencies"}},{"name":"SAST","score":10,"reason":"SAST tool is run on all commits","details":["Info: SAST configuration detected: CodeQL","Info: all commits (21) are checked with a SAST tool"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/ea7e27ed41b76ab879c862fa0ca4cc9c61764ee4/docs/checks.md#sast"}},{"name":"Security-Policy","score":10,"reason":"security policy file detected","details":["Info: security policy file detected: SECURITY.md:1","Info: Found linked content: SECURITY.md:1","Info: Found disclosure, vulnerability, and/or timelines in security policy: SECURITY.md:1","Info: Found text in security policy: SECURITY.md:1"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/ea7e27ed41b76ab879c862fa0ca4cc9c61764ee4/docs/checks.md#security-policy"}},{"name":"Signed-Releases","score":-1,"reason":"no releases found","details":null,"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/ea7e27ed41b76ab879c862fa0ca4cc9c61764ee4/docs/checks.md#signed-releases"}},{"name":"Token-Permissions","score":0,"reason":"detected GitHub workflow tokens with excessive permissions","details":["Info: jobLevel 'contents' permission set to 'read': .github/workflows/ci.yaml:30","Info: jobLevel 'packages' permission set to 'read': .github/workflows/codeql.yml:37","Info: jobLevel 'actions' permission set to 'read': .github/workflows/codeql.yml:40","Info: jobLevel 'contents' permission set to 'read': .github/workflows/codeql.yml:41","Info: jobLevel 'actions' permission set to 'read': .github/workflows/devskim.yml:31","Info: jobLevel 'contents' permission set to 'read': .github/workflows/devskim.yml:32","Warn: jobLevel 'contents' permission set to 'write': .github/workflows/release-plz.yml:49","Warn: jobLevel 'contents' permission set to 'write': .github/workflows/release-plz.yml:17","Info: jobLevel 'contents' permission set to 'read': .github/workflows/scorecards.yml:32","Info: jobLevel 'actions' permission set to 'read': .github/workflows/scorecards.yml:33","Info: jobLevel 'issues' permission set to 'read': .github/workflows/scorecards.yml:35","Info: jobLevel 'pull-requests' permission set to 'read': .github/workflows/scorecards.yml:36","Info: jobLevel 'checks' permission set to 'read': .github/workflows/scorecards.yml:38","Warn: topLevel 'contents' permission set to 'write': .github/workflows/auto_merge_prs.yml:5","Info: topLevel 'contents' permission set to 'read': .github/workflows/ci.yaml:3","Warn: topLevel 'security-events' permission set to 'write': .github/workflows/ci.yaml:4","Warn: no topLevel permission defined: .github/workflows/codeql.yml:1","Info: topLevel 'contents' permission set to 'read': .github/workflows/devskim.yml:24","Info: topLevel 'contents' permission set to 'read': .github/workflows/release-plz.yml:9","Info: topLevel permissions set to 'read-all': .github/workflows/scorecards.yml:21"],"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/ea7e27ed41b76ab879c862fa0ca4cc9c61764ee4/docs/checks.md#token-permissions"}},{"name":"Vulnerabilities","score":10,"reason":"0 existing vulnerabilities detected","details":null,"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/ea7e27ed41b76ab879c862fa0ca4cc9c61764ee4/docs/checks.md#vulnerabilities"}}]},"last_synced_at":"2026-01-30T07:54:51.921Z","repository_id":154404455,"created_at":"2026-01-30T07:54:51.921Z","updated_at":"2026-01-30T07:54:51.921Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32276628,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-25T18:29:39.964Z","status":"ssl_error","status_checked_at":"2026-04-25T18:29:32.149Z","response_time":59,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-08-02T00:01:04.552Z","updated_at":"2026-04-25T21:01:09.089Z","avatar_url":"https://github.com/zip-rs.png","language":"Rust","funding_links":[],"categories":["Libraries","Rust"],"sub_categories":["Compression"],"readme":"# zip [![crates.io version](https://img.shields.io/crates/v/zip)](https://crates.io/crates/zip) ![crates.io downloads](https://img.shields.io/crates/d/zip) [![docs.rs](https://img.shields.io/docsrs/zip)](https://docs.rs/zip) [![Build Status](https://github.com/zip-rs/zip2/actions/workflows/ci.yaml/badge.svg)](https://github.com/zip-rs/zip2/actions?query=branch%3Amaster+workflow%3ACI) [![OpenSSF Best Practices](https://www.bestpractices.dev/projects/11847/badge)](https://www.bestpractices.dev/projects/11847)\n\nA zip library for rust which supports reading and writing of simple ZIP files. Currently hosted at\n\u003chttps://github.com/zip-rs/zip2\u003e.\n\nThe current implementation is based on [PKWARE's APPNOTE.TXT v6.3.9](https://pkware.cachefly.net/webdocs/casestudies/APPNOTE.TXT)\n\nSupported compression formats:\n\n| Formats                             | Reading | Writing |\n| ----------------------------------- | ------- | ------- |\n| Stored (i.e. none)                  | ✅      | ✅      |\n| Implode, Shrink, Reduce             | ✅      |         |\n| Deflate                             | ✅      | ✅      |\n| `Deflate64`                         | ✅      |         |\n| `Bzip2`                             | ✅      | ✅      |\n| `ZStandard`                         | ✅      | ✅      |\n| `LZMA`                              | ✅      |         |\n| `XZ`                                | ✅      | ✅      |\n| `PPMd`                              | ✅      | ✅      |\n| AES encryption                      | ✅      | ✅      |\n| `ZipCrypto` (deprecated encryption) | ✅      | ✅      |\n\nCurrently unsupported zip extensions:\n\n- Multi-disk\n\n## Features\n\nThe features available are:\n\n- `aes-crypto`: Enables decryption of files which were encrypted with AES. Supports AE-1 and AE-2 methods.\n- `deflate`: Enables compressing and decompressing an unspecified implementation (that may change in future versions) of\n  the deflate compression algorithm, which is the default for zip files. Supports compression quality 1..=264.\n- `deflate-flate2`: Combine this with any `flate2` feature flag that enables a back-end, to support deflate compression\n  at quality 1..=9.\n- `deflate-zopfli`: Enables deflating files with the `zopfli` library (used when compression quality is 10..=264). This\n  is the most effective `deflate` implementation available, but also among the slowest. If `flate2` isn't also enabled,\n  only compression will be supported and not decompression.\n- `deflate64`: Enables the deflate64 compression algorithm. Only decompression is supported.\n- `lzma`: Enables the `LZMA` compression algorithm. Only decompression is supported.\n- `bzip2`: Enables the `BZip2` compression algorithm.\n- `ppmd`: Enables the `PPMd` compression algorithm.\n- `time`: Enables features using the [time](https://github.com/time-rs/time) crate.\n- `chrono`: Enables converting last-modified [`zip::DateTime`](https://docs.rs/zip/latest/zip/struct.DateTime.html) to and from `chrono::NaiveDateTime`.\n- `jiff-02`: Enables converting last-modified [`zip::DateTime`](https://docs.rs/zip/latest/zip/struct.DateTime.html) to and from `jiff::civil::DateTime`.\n- `nt-time`: Enables returning timestamps stored in the NTFS extra field as `nt_time::FileTime`.\n- `xz`: Enables the `XZ` compression algorithm.\n- `zstd`: Enables the `Zstandard` compression algorithm.\n\nBy default `aes-crypto`, `bzip2`, `deflate`, `deflate64`, `lzma`, `ppmd`, `time`, `xz` and `zstd` are enabled.\n\n## Library usage\n\nReading:\n- [`ZipArchive::new()`](https://docs.rs/zip/latest/zip/read/struct.ZipArchive.html)\n- [`read_zipfile_from_stream_*`](https://docs.rs/zip/latest/zip/read/)\n\nWriting:\n- [`ZipWriter::new()`](https://docs.rs/zip/latest/zip/write/struct.ZipWriter.html) - to create a new archive\n- [`ZipWriter::new_stream()`](https://docs.rs/zip/latest/zip/write/struct.ZipWriter.html#method.new_stream) - to write in stream mode\n\n## Examples\n\nSee the [examples directory](https://github.com/zip-rs/zip2/tree/master/examples) for:\n\n- How to [write a file to a zip](https://github.com/zip-rs/zip2/tree/master/examples/write_sample.rs).\n- How to [write a directory of files to a zip](https://github.com/zip-rs/zip2/tree/master/examples/write_dir.rs) (using [walkdir](https://github.com/BurntSushi/walkdir)).\n- How to [extract a zip file](https://github.com/zip-rs/zip2/tree/master/examples/extract.rs).\n- How to [extract a single file from a zip](https://github.com/zip-rs/zip2/tree/master/examples/extract_lorem.rs).\n- How to [read a zip from the standard input](https://github.com/zip-rs/zip2/tree/master/examples/stdin_info.rs).\n- How to [append a directory to an existing archive](https://github.com/zip-rs/zip2/tree/master/examples/append.rs)\n\n## Wasm\n\nThis library can work in a Wasm environment but you may need to disable certain features (which are using non-rust library). Here is an example below\n\n```toml\n# change to latest version\nzip = { version = \"latest\", default-features = false, features = [\n    # \"aes-crypto\",\n    # \"bzip2\",\n    # \"xz\",\n    \"deflate64\",\n    \"deflate\",\n    \"lzma\",\n    \"time\",\n    \"zstd\",\n] }\n```\n\n## MSRV\n\nOur current Minimum Supported Rust Version is **1.88**. When adding features,\nwe will follow these guidelines:\n\n- We will always support a minor Rust version that has been stable for at least 6 months.\n- Any change to the MSRV will be accompanied with a **minor** version bump.\n\n## License\n\nLicensed under the [MIT License](./LICENSE). Some files in the \"tests/data\" subdirectory of this repository are under other\nlicenses; see files named `LICENSE.*.txt` for details.\n\n## Fuzzing\n\nFuzzing support is through [`cargo afl`](https://rust-fuzz.github.io/book/afl/tutorial.html). To install `cargo afl`:\n\n```sh\ncargo install cargo-afl\n```\n\nTo start fuzzing zip extraction:\n\n```sh\nmkdir -vp fuzz-read-out\ncargo afl build --manifest-path=fuzz/Cargo.toml --all-features -p fuzz_read\n# Curated input corpus:\ncargo afl fuzz -i fuzz/read/in -o fuzz-read-out fuzz/target/debug/fuzz_read\n# Test data files:\ncargo afl fuzz -i tests/data -e zip -o fuzz-read-out fuzz/target/debug/fuzz_read\n```\n\nTo start fuzzing zip creation:\n\n```sh\nmkdir -vp fuzz-write-out\ncargo afl build --manifest-path=fuzz/Cargo.toml --all-features -p fuzz_write\n# Curated input corpus and dictionary schema:\ncargo afl fuzz -x fuzz/write/fuzz.dict -i fuzz/write/in -o fuzz-write-out fuzz/target/debug/fuzz_write\n```\n\n### Fuzzing stdio\n\nThe read and write fuzzers can also receive input over stdin for one-off validation. Note here that the fuzzers can be configured to build in support for DEFLATE, or not:\n\n```sh\n# Success, no output:\ncargo run --manifest-path=fuzz/Cargo.toml --quiet --all-features -p fuzz_read \u003ctests/data/deflate64.zip\n# Error, without deflate64 support:\ncargo run --manifest-path=fuzz/Cargo.toml --quiet -p fuzz_read \u003ctests/data/deflate64.zip\n\nthread 'main' (537304) panicked at fuzz_read/src/main.rs:40:36:\ncalled `Result::unwrap()` on an `Err` value: UnsupportedArchive(\"Compression method not supported\")\nnote: run with `RUST_BACKTRACE=1` environment variable to display a backtrace\n```\n\nThe zip creation fuzzer will try to print out a description of the kind of input it translated the input bytes into:\n\n```sh\n# This is an empty input case:\n\u003cfuzz/write/in/id-000000,time-0,execs-0,orig-0011743621118ab6c5278ffbb8fd14bddd8369ee.min \\\n  cargo run --manifest-path=fuzz/Cargo.toml --quiet --all-features -p fuzz_write\n# This input was translated into one or more test cases:\n\u003cfuzz/write/in/id-000000,time-0,execs-0,orig-0011743621118ab6c5278ffbb8fd14bddd8369ee.min \\\n  cargo run --manifest-path=fuzz/Cargo.toml --quiet -p fuzz_write\nwriter.start_file_from_path(\"\", FileOptions { compression_method: Stored, compression_level: None, last_modified_time: DateTime::from_date_and_time(2048, 1, 1, 0, 0, 0)?, permissions: None, large_file: false, encrypt_with: None, extended_options: ExtendedFileOptions {extra_data: vec![].into(), central_extra_data: vec![].into()}, alignment: 0 })?;\nwriter.write_all(\u0026[])?;\nwriter\nlet _ = writer.finish_into_readable()?;\n```\n\nThe zip creation fuzzer uses [`arbitrary::Unstructured`](https://docs.rs/arbitrary/latest/arbitrary/struct.Unstructured.html) to convert bytes over stdin to random inputs, so it can be triggered with other sources of random input:\n\n```sh\n# Usually, the random input is translated into zero test cases:\nhead -c50 /dev/random | cargo run --manifest-path=fuzz/Cargo.toml --quiet --all-features -p fuzz_write\n# Sometimes, one or more test cases are generated and successfully evaluated:\nhead -c50 /dev/random | cargo run --manifest-path=fuzz/Cargo.toml --quiet --all-features -p fuzz_write\nwriter.set_raw_comment([20, 202])?;\nlet mut writer = ZipWriter::new_append(writer.finish()?)?;\nlet sub_writer = {\nlet mut initial_junk = Cursor::new(vec![106]);\ninitial_junk.seek(SeekFrom::End(0))?;\n                          let mut writer = ZipWriter::new(initial_junk);\nwriter\n};\nwriter.merge_archive(sub_writer.finish_into_readable()?)?;\nlet mut writer = ZipWriter::new_append(writer.finish()?)?;\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fzip-rs%2Fzip2","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fzip-rs%2Fzip2","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fzip-rs%2Fzip2/lists"}