{"id":13438706,"url":"https://github.com/ende76/brotli-rs","last_synced_at":"2025-03-20T06:31:09.334Z","repository":{"id":138512090,"uuid":"44706020","full_name":"ende76/brotli-rs","owner":"ende76","description":"A Brotli implementation in pure and safe Rust","archived":false,"fork":false,"pushed_at":"2020-04-06T22:11:36.000Z","size":3828,"stargazers_count":61,"open_issues_count":1,"forks_count":19,"subscribers_count":6,"default_branch":"master","last_synced_at":"2024-04-22T13:31:37.193Z","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":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ende76.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null}},"created_at":"2015-10-21T21:36:46.000Z","updated_at":"2024-01-07T12:12:19.000Z","dependencies_parsed_at":"2023-03-16T19:15:25.360Z","dependency_job_id":null,"html_url":"https://github.com/ende76/brotli-rs","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ende76%2Fbrotli-rs","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ende76%2Fbrotli-rs/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ende76%2Fbrotli-rs/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ende76%2Fbrotli-rs/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ende76","download_url":"https://codeload.github.com/ende76/brotli-rs/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":244565249,"owners_count":20473234,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","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-07-31T03:01:07.718Z","updated_at":"2025-03-20T06:31:04.324Z","avatar_url":"https://github.com/ende76.png","language":"Rust","funding_links":[],"categories":["Libraries","库 Libraries","库","Compression"],"sub_categories":["Compression","压缩 Compression","压缩"],"readme":"# Brotli-rs - Brotli decompression in pure, safe Rust\n\n[![Build Status](https://api.travis-ci.org/ende76/brotli-rs.png?branch=master)](https://travis-ci.org/ende76/brotli-rs) ![Works on stable](https://img.shields.io/badge/works%20on-stable-green.svg) ![Works on beta](https://img.shields.io/badge/works%20on-beta-yellow.svg) ![Works on nightly](https://img.shields.io/badge/works%20on-nightly-lightgrey.svg)\n\n[Documentation](http://ende76.github.io/brotli-rs/brotli/)\n\nCompression provides a \\\u003cRead\\\u003e-struct to wrap a Brotli-compressed stream. A consumer is thus able to read a compressed stream with usual convenience.\n\n## Changelog\n\n### v0.3.22 -\u003e v0.3.23\n----------------\n\nBug with literal buffer not being populated when processing uncompressed metablock, bug where a valid stream could be rejected too early as oversized, if the last bytes happened to be shortened by an OMIT-type transformation after the early check, reported and fixed by [Daniel](https://github.com/danielrh).\n\n\n### v0.3.21 -\u003e v0.3.22\n----------------\n\nBug with metablock structure not getting fully reset when encountering a new metablock in the brotli stream, reported and fixed by [Daniel](https://github.com/danielrh).\n\n### v0.3.20 -\u003e v0.3.21\n----------------\n\nBug with multiple metablocks, reported and fixed by [Daniel](https://github.com/danielrh).\n\n###v0.3.19 -\u003e v0.3.20\n----------------\n\nWorked around feature gate issue in nightly. (Thanks, [Corey](https://github.com/frewsxcv)!)\n\n### v0.3.18 -\u003e v0.3.19\n----------------\n\nRemoved 64k big Pseudo-Code lookup table, because creating this trivial table probably took more time than making the calculcation on the fly. (Bench tests seem to suggest a 1% time savings without the lookup table)\n\n### v0.3.17 -\u003e v0.3.18\n----------------\n\nFixed case where a simple prefix code could have duplicate symbols.\n\n### v0.3.16 -\u003e v0.3.17\n----------------\n\nFixed case where a complex prefix code could have an incorrect checksum on its runlength code.\n\n### v0.3.15 -\u003e v0.3.16\n----------------\n\n- Fixed incorrect calculation of alphabet size for distance code.\n- Fixed evaluation where streams with excessive insert/copy lengths could be rejected early. \n\n### v0.3.14 -\u003e v0.3.15\n----------------\n\nFixed injection of invalid symbols in simple prefix code.\n\n### v0.3.13 -\u003e v0.3.14\n----------------\n\nFixed invalid block-type in switch command. (Thanks, [Corey](https://github.com/frewsxcv)!).\n\n### v0.3.12 -\u003e v0.3.13\n----------------\n\nFixed uncaught non-positive distances. (Thanks, [Corey](https://github.com/frewsxcv)!).\n\n### v0.3.11 -\u003e v0.3.12\n----------------\n\nFixed uncaught zero-byte in word transformation. (Thanks, [Corey](https://github.com/frewsxcv)!).\n\n### v0.3.10 -\u003e v0.3.11\n----------------\n\nFixed possible arithmetic overflow in word transformation. (Thanks, [Corey](https://github.com/frewsxcv)!).\n\n### v0.3.9 -\u003e v0.3.10\n----------------\n\nFixed incorrect type for runlength code. (Thanks, [Corey](https://github.com/frewsxcv)!).\n\n### v0.3.8 -\u003e v0.3.9\n----------------\n\nFixed incorrect array index bound check in tree lookup. (Thanks, [Corey](https://github.com/frewsxcv)!).\n\n### v0.3.7 -\u003e v0.3.8\n----------------\n\nFixed some value range checks on block types and ntree*. (Thanks, [Corey](https://github.com/frewsxcv)!).\n\n### v0.3.6 -\u003e v0.3.7\n----------------\n\nWent over \"unreachable!()\" statements, analyzed, and handled error condition properly, if they were reachable through invalid data.\n\n### v0.3.5 -\u003e v0.3.6\n----------------\n\nFixed a case where an invalid prefix code with all-zero codelengths could create an index-out-of-bounds panic. (Thanks, [Corey](https://github.com/frewsxcv)!).\n\n### v0.3.4 -\u003e v0.3.5\n----------------\n\nFixed a case where an invalid insert-and-copy-length-code would produce a panic. (Thanks, [Corey](https://github.com/frewsxcv)!).\n\n### v0.3.1 -\u003e v0.3.4\n----------------\n\nFair amount of internal small improvements, improving code quality. Fixed a couple of cases where invalid streams would lead to panics and/or infinite loops (Thanks, [Corey](https://github.com/frewsxcv)!).\n\n\n### v0.3.0 -\u003e v0.3.1\n----------------\n\nThis is only a minor version bump, with no breakage in usage, but it's exciting nonetheless!\n\nIn Brotli, a lot of work is done with and by prefix codes. Through a change in the internal representation of prefix codes, it was possible to speed the reference benchmark time by a factor of ~7. The benchmark decompresses the contents of the file data/monkey.compressed.\n\n- With linked-list-based, recursive tree implementation:  \ntest bench_monkey              ... bench:     __866,888 ns__/iter (+/- 58,119)\n\n- With array-based, iterative tree implementation, before max-depth constraint:  \ntest bench_monkey              ... bench:     __704,282 ns__/iter (+/- 220,068)\n\n- With array-based, iterative tree implementation, with max-depth constraint:  \ntest bench_monkey              ... bench:     __120,745 ns__/iter (+/- 16,627)\n\n\n### v0.2.0 -\u003e v0.3.0\n----------------\n\n- renamed crate compression -\u003e brotli\n- restructured modules to avoid redundant paths like brotli::brotli::Decompressor (now it's just brotli::Decompressor)\n\n\n### v0.1.0 -\u003e v0.2.0\n----------------\n\n- Decompressor::new() now accepts a Read, as opposed to a BitReader.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fende76%2Fbrotli-rs","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fende76%2Fbrotli-rs","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fende76%2Fbrotli-rs/lists"}