1<p align="center"><img src="https://brotli.org/brotli.svg" alt="Brotli" width="64"></p> 2 3# SECURITY NOTE 4 5Please consider updating brotli to version 1.0.9 (latest). 6 7Version 1.0.9 contains a fix to "integer overflow" problem. This happens when "one-shot" decoding API is used (or input chunk for streaming API is not limited), input size (chunk size) is larger than 2GiB, and input contains uncompressed blocks. After the overflow happens, `memcpy` is invoked with a gigantic `num` value, that will likely cause the crash. 8 9### Introduction 10 11Brotli is a generic-purpose lossless compression algorithm that compresses data 12using a combination of a modern variant of the LZ77 algorithm, Huffman coding 13and 2nd order context modeling, with a compression ratio comparable to the best 14currently available general-purpose compression methods. It is similar in speed 15with deflate but offers more dense compression. 16 17The specification of the Brotli Compressed Data Format is defined in [RFC 7932](https://tools.ietf.org/html/rfc7932). 18 19Brotli is open-sourced under the MIT License, see the LICENSE file. 20 21Brotli mailing list: 22https://groups.google.com/forum/#!forum/brotli 23 24[![TravisCI Build Status](https://travis-ci.org/google/brotli.svg?branch=master)](https://travis-ci.org/google/brotli) 25[![AppVeyor Build Status](https://ci.appveyor.com/api/projects/status/github/google/brotli?branch=master&svg=true)](https://ci.appveyor.com/project/szabadka/brotli) 26[![Fuzzing Status](https://oss-fuzz-build-logs.storage.googleapis.com/badges/brotli.svg)](https://oss-fuzz-build-logs.storage.googleapis.com/index.html#brotli) 27 28### Build instructions 29 30#### Vcpkg 31 32You can download and install brotli using the [vcpkg](https://github.com/Microsoft/vcpkg/) dependency manager: 33 34 git clone https://github.com/Microsoft/vcpkg.git 35 cd vcpkg 36 ./bootstrap-vcpkg.sh 37 ./vcpkg integrate install 38 vcpkg install brotli 39 40The brotli port in vcpkg is kept up to date by Microsoft team members and community contributors. If the version is out of date, please [create an issue or pull request](https://github.com/Microsoft/vcpkg) on the vcpkg repository. 41 42#### Autotools-style CMake 43 44[configure-cmake](https://github.com/nemequ/configure-cmake) is an 45autotools-style configure script for CMake-based projects (not supported on Windows). 46 47The basic commands to build, test and install brotli are: 48 49 $ mkdir out && cd out 50 $ ../configure-cmake 51 $ make 52 $ make test 53 $ make install 54 55By default, debug binaries are built. To generate "release" `Makefile` specify `--disable-debug` option to `configure-cmake`. 56 57#### Bazel 58 59See [Bazel](http://www.bazel.build/) 60 61#### CMake 62 63The basic commands to build and install brotli are: 64 65 $ mkdir out && cd out 66 $ cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=./installed .. 67 $ cmake --build . --config Release --target install 68 69You can use other [CMake](https://cmake.org/) configuration. 70 71#### Premake5 72 73See [Premake5](https://premake.github.io/) 74 75#### Python 76 77To install the latest release of the Python module, run the following: 78 79 $ pip install brotli 80 81To install the tip-of-the-tree version, run: 82 83 $ pip install --upgrade git+https://github.com/google/brotli 84 85See the [Python readme](python/README.md) for more details on installing 86from source, development, and testing. 87 88### Benchmarks 89* [Squash Compression Benchmark](https://quixdb.github.io/squash-benchmark/) / [Unstable Squash Compression Benchmark](https://quixdb.github.io/squash-benchmark/unstable/) 90* [Large Text Compression Benchmark](http://mattmahoney.net/dc/text.html) 91* [Lzturbo Benchmark](https://sites.google.com/site/powturbo/home/benchmark) 92 93### Related projects 94> **Disclaimer:** Brotli authors take no responsibility for the third party projects mentioned in this section. 95 96Independent [decoder](https://github.com/madler/brotli) implementation by Mark Adler, based entirely on format specification. 97 98JavaScript port of brotli [decoder](https://github.com/devongovett/brotli.js). Could be used directly via `npm install brotli` 99 100Hand ported [decoder / encoder](https://github.com/dominikhlbg/BrotliHaxe) in haxe by Dominik Homberger. Output source code: JavaScript, PHP, Python, Java and C# 101 1027Zip [plugin](https://github.com/mcmilk/7-Zip-Zstd) 103 104Dart [native bindings](https://github.com/thosakwe/brotli) 105