lz4/lz4
### [`v1.9.4`](https://togithub.com/lz4/lz4/releases/tag/v1.9.4)
[Compare Source](https://togithub.com/lz4/lz4/compare/v1.9.3...v1.9.4)
LZ4 `v1.9.4` is a maintenance release, featuring a substantial amount (~350 commits) of minor fixes and improvements, making it a recommended upgrade. The stable portion of `liblz4` API is unmodified, making this release a drop-in replacement for existing features.
##### Improved decompression speed
Performance wasn't a major focus of this release, but there are nonetheless a few improvements worth mentioning :
- Decompression speed on high-end `ARM64` platform is improved, by ~+20%. This is notably the case for recent M1 chips, featured in macbook laptops and nucs. Some server-class ARM64 cpus are also impacted, most notably when employing `gcc` as a compiler. Due to the diversity of `aarch64` chips in service, it's still difficult to have a one-size-fits-all policy for this platform.
- For the specific scenario of data compressed with `-BD4` setting (small blocks, <= 64 KB, linked) decompressed block-by-block into a flush buffer, decompression speed is improved ~+70%. This is most visible in the `lz4` CLI, which triggers this exact scenario, but since the improvement is achieved at library level, it may also apply to other scenarios.
- Additionally, for compressed data employing the `lz4frame` format (native format of `lz4` CLI), it's possible to ignore checksum validation during decompression, resulting in speed improvements of ~+40% . This capability is exposed at both CLI (see `--no-crc`) and library levels.
##### New experimental library capabilities
New `liblz4` capabilities are provided in this version. They are considered experimental at this stage, and the most useful ones will be upgraded as candidate "stable" status in an upcoming release :
- Ability to require `lz4frame` API to employ custom allocators for dynamic allocation.
- Partial decompression of LZ4 blocks compressed with a dictionary, using `LZ4_decompress_safe_partial_usingDict()` by [@yawqi](https://togithub.com/yawqi)
- Create `lz4frame` blocks which are intentionally uncompressed, using `LZ4F_uncompressedUpdate()`, by [@alexmohr](https://togithub.com/alexmohr)
- New API unit `lz4file`, abstracting File I/O operations for higher-level programs and libraries, by [@anjiahao1](https://togithub.com/anjiahao1)
- `liblz4` can be built for freestanding environments, using the new build macro `LZ4_FREESTANDING`, by [@t-mat](https://togithub.com/t-mat). In which case, it will not link to any standard library, disable all dynamic allocations, and rely on user-provided `memcpy()` and `memset()` operations.
##### Miscellaneous
- Fixed an annoying `Makefile` bug introduced in `v1.9.3`, in which `CFLAGS` was no longer respected when provided from environment variable. The root cause was an obscure bug in `make`, which has been fixed upstream following this bug report. There is no need to update `make` to build `liblz4` though, the `Makefile` has been modified to circumvent the issue and remains compatible with older versions of `make`.
- `Makefile` is compatible with `-j` parallel run, including to run parallel tests (`make -j test`).
- Documentation of LZ4 Block format has been updated, featuring notably a paragraph "Implementation notes", underlining common pitfalls for new implementers of the format
##### Changes list
Here is a more detailed list of updates introduced in `v1.9.4` :
- perf : faster decoding speed (~+20%) on Apple Silicon platforms, by [@zeux](https://togithub.com/zeux)
- perf : faster decoding speed (~+70%) for `-BD4` setting in CLI
- api : new function `LZ4_decompress_safe_partial_usingDict()` by [@yawqi](https://togithub.com/yawqi)
- api : `lz4frame`: ability to provide custom allocators at state creation
- api : can skip checksum validation for improved decoding speed
- api : new experimental unit `lz4file` for file i/o API, by [@anjiahao1](https://togithub.com/anjiahao1)
- api : new experimental function `LZ4F_uncompressedUpdate()`, by [@alexmohr](https://togithub.com/alexmohr)
- cli : `--list` works on `stdin` input, by [@Low-power](https://togithub.com/Low-power)
- cli : `--no-crc` does not produce (compression) nor check (decompression) checksums
- cli : fix: `--test` and `--list` produce an error code when parsing invalid input
- cli : fix: `--test -m` does no longer create decompressed file artifacts
- cli : fix: support skippable frames when passed via `stdin`, reported by [@davidmankin](https://togithub.com/davidmankin)
- build: fix: `Makefile` respects `CFLAGS` directives passed via environment variable
- build: `LZ4_FREESTANDING`, new build macro for freestanding environments, by [@t-mat](https://togithub.com/t-mat)
- build: `make` and `make test` are compatible with `-j` parallel run
- build: AS/400 compatibility, by [@jonrumsey](https://togithub.com/jonrumsey)
- build: Solaris 10 compatibility, by [@pekdon](https://togithub.com/pekdon)
- build: MSVC 2022 support, by [@t-mat](https://togithub.com/t-mat)
- build: improved meson script, by [@eli-schwartz](https://togithub.com/eli-schwartz)
- doc : Updated LZ4 block format, provide an "implementation notes" section
#### New Contributors
- [@emaxerrno](https://togithub.com/emaxerrno) made their first contribution in [https://github.com/lz4/lz4/pull/884](https://togithub.com/lz4/lz4/pull/884)
- [@servusdei2018](https://togithub.com/servusdei2018) made their first contribution in [https://github.com/lz4/lz4/pull/886](https://togithub.com/lz4/lz4/pull/886)
- [@aqrit](https://togithub.com/aqrit) made their first contribution in [https://github.com/lz4/lz4/pull/898](https://togithub.com/lz4/lz4/pull/898)
- [@attilaolah](https://togithub.com/attilaolah) made their first contribution in [https://github.com/lz4/lz4/pull/919](https://togithub.com/lz4/lz4/pull/919)
- [@XVilka](https://togithub.com/XVilka) made their first contribution in [https://github.com/lz4/lz4/pull/922](https://togithub.com/lz4/lz4/pull/922)
- [@hmaarrfk](https://togithub.com/hmaarrfk) made their first contribution in [https://github.com/lz4/lz4/pull/962](https://togithub.com/lz4/lz4/pull/962)
- [@ThomasWaldmann](https://togithub.com/ThomasWaldmann) made their first contribution in [https://github.com/lz4/lz4/pull/965](https://togithub.com/lz4/lz4/pull/965)
- [@sigiesec](https://togithub.com/sigiesec) made their first contribution in [https://github.com/lz4/lz4/pull/964](https://togithub.com/lz4/lz4/pull/964)
- [@klebertarcisio](https://togithub.com/klebertarcisio) made their first contribution in [https://github.com/lz4/lz4/pull/973](https://togithub.com/lz4/lz4/pull/973)
- [@jasperla](https://togithub.com/jasperla) made their first contribution in [https://github.com/lz4/lz4/pull/972](https://togithub.com/lz4/lz4/pull/972)
- [@GabeNI](https://togithub.com/GabeNI) made their first contribution in [https://github.com/lz4/lz4/pull/1001](https://togithub.com/lz4/lz4/pull/1001)
- [@ITotalJustice](https://togithub.com/ITotalJustice) made their first contribution in [https://github.com/lz4/lz4/pull/1005](https://togithub.com/lz4/lz4/pull/1005)
- [@lifegpc](https://togithub.com/lifegpc) made their first contribution in [https://github.com/lz4/lz4/pull/1000](https://togithub.com/lz4/lz4/pull/1000)
- [@eloj](https://togithub.com/eloj) made their first contribution in [https://github.com/lz4/lz4/pull/1011](https://togithub.com/lz4/lz4/pull/1011)
- [@pekdon](https://togithub.com/pekdon) made their first contribution in [https://github.com/lz4/lz4/pull/999](https://togithub.com/lz4/lz4/pull/999)
- [@fanzeyi](https://togithub.com/fanzeyi) made their first contribution in [https://github.com/lz4/lz4/pull/1017](https://togithub.com/lz4/lz4/pull/1017)
- [@a1346054](https://togithub.com/a1346054) made their first contribution in [https://github.com/lz4/lz4/pull/1024](https://togithub.com/lz4/lz4/pull/1024)
- [@kmou424](https://togithub.com/kmou424) made their first contribution in [https://github.com/lz4/lz4/pull/1026](https://togithub.com/lz4/lz4/pull/1026)
- [@kostasdizas](https://togithub.com/kostasdizas) made their first contribution in [https://github.com/lz4/lz4/pull/1030](https://togithub.com/lz4/lz4/pull/1030)
- [@fwessels](https://togithub.com/fwessels) made their first contribution in [https://github.com/lz4/lz4/pull/1032](https://togithub.com/lz4/lz4/pull/1032)
- [@zeux](https://togithub.com/zeux) made their first contribution in [https://github.com/lz4/lz4/pull/1040](https://togithub.com/lz4/lz4/pull/1040)
- [@DimitriPapadopoulos](https://togithub.com/DimitriPapadopoulos) made their first contribution in [https://github.com/lz4/lz4/pull/1042](https://togithub.com/lz4/lz4/pull/1042)
- [@mcfi](https://togithub.com/mcfi) made their first contribution in [https://github.com/lz4/lz4/pull/1054](https://togithub.com/lz4/lz4/pull/1054)
- [@eli-schwartz](https://togithub.com/eli-schwartz) made their first contribution in [https://github.com/lz4/lz4/pull/1049](https://togithub.com/lz4/lz4/pull/1049)
- [@leonvictor](https://togithub.com/leonvictor) made their first contribution in [https://github.com/lz4/lz4/pull/1052](https://togithub.com/lz4/lz4/pull/1052)
- [@tristan957](https://togithub.com/tristan957) made their first contribution in [https://github.com/lz4/lz4/pull/1064](https://togithub.com/lz4/lz4/pull/1064)
- [@anjiahao1](https://togithub.com/anjiahao1) made their first contribution in [https://github.com/lz4/lz4/pull/1068](https://togithub.com/lz4/lz4/pull/1068)
- [@danyeaw](https://togithub.com/danyeaw) made their first contribution in [https://github.com/lz4/lz4/pull/1075](https://togithub.com/lz4/lz4/pull/1075)
- [@yawqi](https://togithub.com/yawqi) made their first contribution in [https://github.com/lz4/lz4/pull/1093](https://togithub.com/lz4/lz4/pull/1093)
- [@nathannaveen](https://togithub.com/nathannaveen) made their first contribution in [https://github.com/lz4/lz4/pull/1088](https://togithub.com/lz4/lz4/pull/1088)
- [@alexmohr](https://togithub.com/alexmohr) made their first contribution in [https://github.com/lz4/lz4/pull/1094](https://togithub.com/lz4/lz4/pull/1094)
- [@yoniko](https://togithub.com/yoniko) made their first contribution in [https://github.com/lz4/lz4/pull/1100](https://togithub.com/lz4/lz4/pull/1100)
- [@jonrumsey](https://togithub.com/jonrumsey) made their first contribution in [https://github.com/lz4/lz4/pull/1104](https://togithub.com/lz4/lz4/pull/1104)
- [@dpelle](https://togithub.com/dpelle) made their first contribution in [https://github.com/lz4/lz4/pull/1125](https://togithub.com/lz4/lz4/pull/1125)
- [@SpaceIm](https://togithub.com/SpaceIm) made their first contribution in [https://github.com/lz4/lz4/pull/1133](https://togithub.com/lz4/lz4/pull/1133)
### [`v1.9.3`](https://togithub.com/lz4/lz4/releases/tag/v1.9.3)
[Compare Source](https://togithub.com/lz4/lz4/compare/v1.9.2...v1.9.3)
LZ4 `v1.9.3` is a maintenance release, offering more than 200+ commits to fix multiple corner cases and build scenarios. Update is recommended. Existing `liblz4` API is not modified, so it should be a drop-in replacement.
##### Faster Windows binaries
On the build side, multiple rounds of improvements, thanks to contributors such as [@wolfpld](https://togithub.com/wolfpld) and [@remittor](https://togithub.com/remittor), make this version generate **faster binaries for Visual Studio**. It is also expected to better support a broader range of VS variants.
Speed benefits can be substantial. For example, on my laptop, compared with `v1.9.2`, this version built with VS2019 compresses at 640 MB/s (from 420 MB/s), and decompression reaches 3.75 GB/s (from 3.3 GB/s). So this is definitely perceptible.
##### Other notable updates
Among the visible fixes, this version improves the `_destSize()` variant, an advanced API which reverses the logic by targeting an a-priori compressed size and trying to shove as much data as possible into the target budget. The high compression variant `LZ4_compress_HC_destSize()` would miss some important opportunities in highly compressible data, resulting in less than optimal compression (detected by [@hsiangkao](https://togithub.com/hsiangkao)). This is fixed in this version. Even the "fast" variant receives some gains (albeit very small).
Also, the corresponding decompression function, `LZ4_decompress_safe_partial()`, officially supports a scenario where the input (compressed) size is unknown (but bounded), as long as the requested amount of data to regenerate is smaller or equal to the block's content. This function used to require the exact compressed size, and would sometimes support above scenario "by accident", but then could also break it by accident. This is now firmly controlled, documented and tested.
Finally, replacing memory functions (`malloc()`, `calloc()`, `free()`), typically for freestanding environments, is now a bit easier. It used to require a small direct modification of `lz4.c` source code, but can now be achieved by using the build macro `LZ4_USER_MEMORY_FUNCTIONS` at compilation time. In which case, `liblz4` no longer includes ``, and requires instead that functions `LZ4_malloc()`, `LZ4_calloc()` and `LZ4_free()` are implemented somewhere in the project, and then available at link time.
##### Changes list
Here is a more detailed list of updates introduced in `v1.9.3` :
- perf: highly improved speed in kernel space, by [@terrelln](https://togithub.com/terrelln)
- perf: faster speed with Visual Studio, thanks to [@wolfpld](https://togithub.com/wolfpld) and [@remittor](https://togithub.com/remittor)
- perf: improved dictionary compression speed, by [@felixhandte](https://togithub.com/felixhandte)
- perf: fixed `LZ4_compress_HC_destSize()` ratio, detected by [@hsiangkao](https://togithub.com/hsiangkao)
- perf: reduced stack usage in high compression mode, by [@Yanpas](https://togithub.com/Yanpas)
- api : `LZ4_decompress_safe_partial()` supports unknown compressed size, requested by [@jfkthame](https://togithub.com/jfkthame)
- api : improved `LZ4F_compressBound()` with automatic flushing, by Christopher Harvie
- api : can (de)compress to/from NULL without UBs
- api : fix alignment test on 32-bit systems (state initialization)
- api : fix `LZ4_saveDictHC()` in corner case scenario, detected by [@IgorKorkin](https://togithub.com/IgorKorkin)
- cli : compress multiple files using the legacy format, by Filipe Calasans
- cli : benchmark mode supports dictionary, by [@rkoradi](https://togithub.com/rkoradi)
- cli : fix `--fast` with large argument, detected by [@picoHz](https://togithub.com/picoHz)
- build: link to user-defined memory functions with `LZ4_USER_MEMORY_FUNCTIONS`
- build: `contrib/cmake_unofficial/` moved to `build/cmake/`
- build: `visual/*` moved to `build/`
- build: updated meson script, by [@neheb](https://togithub.com/neheb)
- build: tinycc support, by Anton Kochkov
- install: Haiku support, by Jerome Duval
- doc : updated LZ4 frame format, clarify EndMark
Known issues :
- Some people have [reported a broken `liblz4_static.lib` file](https://togithub.com/lz4/lz4/issues/920) in the package `lz4_win64_v1_9_3.zip`. This is probably a `mingw` / `msvc` compatibility issue. If you have issues employing this file, the solution is to rebuild it locally from sources with your target compiler.
- The standard `Makefile` in `v1.9.3` doesn't honor `CFLAGS` when passed through environment variable. This is fixed in more recent version on `dev` branch. See [#958](https://togithub.com/lz4/lz4/issues/958) for details.
Configuration
📅 Schedule: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined).
🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.
♻ Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.
🔕 Ignore: Close this PR and you won't be reminded about this update again.
[ ] If you want to rebase/retry this PR, click this checkbox.
This PR has been generated by Mend Renovate. View repository job log here.
This PR contains the following updates:
v1.9.2
->v1.9.4
Release Notes
lz4/lz4
### [`v1.9.4`](https://togithub.com/lz4/lz4/releases/tag/v1.9.4) [Compare Source](https://togithub.com/lz4/lz4/compare/v1.9.3...v1.9.4) LZ4 `v1.9.4` is a maintenance release, featuring a substantial amount (~350 commits) of minor fixes and improvements, making it a recommended upgrade. The stable portion of `liblz4` API is unmodified, making this release a drop-in replacement for existing features. ##### Improved decompression speed Performance wasn't a major focus of this release, but there are nonetheless a few improvements worth mentioning : - Decompression speed on high-end `ARM64` platform is improved, by ~+20%. This is notably the case for recent M1 chips, featured in macbook laptops and nucs. Some server-class ARM64 cpus are also impacted, most notably when employing `gcc` as a compiler. Due to the diversity of `aarch64` chips in service, it's still difficult to have a one-size-fits-all policy for this platform. - For the specific scenario of data compressed with `-BD4` setting (small blocks, <= 64 KB, linked) decompressed block-by-block into a flush buffer, decompression speed is improved ~+70%. This is most visible in the `lz4` CLI, which triggers this exact scenario, but since the improvement is achieved at library level, it may also apply to other scenarios. - Additionally, for compressed data employing the `lz4frame` format (native format of `lz4` CLI), it's possible to ignore checksum validation during decompression, resulting in speed improvements of ~+40% . This capability is exposed at both CLI (see `--no-crc`) and library levels. ##### New experimental library capabilities New `liblz4` capabilities are provided in this version. They are considered experimental at this stage, and the most useful ones will be upgraded as candidate "stable" status in an upcoming release : - Ability to require `lz4frame` API to employ custom allocators for dynamic allocation. - Partial decompression of LZ4 blocks compressed with a dictionary, using `LZ4_decompress_safe_partial_usingDict()` by [@yawqi](https://togithub.com/yawqi) - Create `lz4frame` blocks which are intentionally uncompressed, using `LZ4F_uncompressedUpdate()`, by [@alexmohr](https://togithub.com/alexmohr) - New API unit `lz4file`, abstracting File I/O operations for higher-level programs and libraries, by [@anjiahao1](https://togithub.com/anjiahao1) - `liblz4` can be built for freestanding environments, using the new build macro `LZ4_FREESTANDING`, by [@t-mat](https://togithub.com/t-mat). In which case, it will not link to any standard library, disable all dynamic allocations, and rely on user-provided `memcpy()` and `memset()` operations. ##### Miscellaneous - Fixed an annoying `Makefile` bug introduced in `v1.9.3`, in which `CFLAGS` was no longer respected when provided from environment variable. The root cause was an obscure bug in `make`, which has been fixed upstream following this bug report. There is no need to update `make` to build `liblz4` though, the `Makefile` has been modified to circumvent the issue and remains compatible with older versions of `make`. - `Makefile` is compatible with `-j` parallel run, including to run parallel tests (`make -j test`). - Documentation of LZ4 Block format has been updated, featuring notably a paragraph "Implementation notes", underlining common pitfalls for new implementers of the format ##### Changes list Here is a more detailed list of updates introduced in `v1.9.4` : - perf : faster decoding speed (~+20%) on Apple Silicon platforms, by [@zeux](https://togithub.com/zeux) - perf : faster decoding speed (~+70%) for `-BD4` setting in CLI - api : new function `LZ4_decompress_safe_partial_usingDict()` by [@yawqi](https://togithub.com/yawqi) - api : `lz4frame`: ability to provide custom allocators at state creation - api : can skip checksum validation for improved decoding speed - api : new experimental unit `lz4file` for file i/o API, by [@anjiahao1](https://togithub.com/anjiahao1) - api : new experimental function `LZ4F_uncompressedUpdate()`, by [@alexmohr](https://togithub.com/alexmohr) - cli : `--list` works on `stdin` input, by [@Low-power](https://togithub.com/Low-power) - cli : `--no-crc` does not produce (compression) nor check (decompression) checksums - cli : fix: `--test` and `--list` produce an error code when parsing invalid input - cli : fix: `--test -m` does no longer create decompressed file artifacts - cli : fix: support skippable frames when passed via `stdin`, reported by [@davidmankin](https://togithub.com/davidmankin) - build: fix: `Makefile` respects `CFLAGS` directives passed via environment variable - build: `LZ4_FREESTANDING`, new build macro for freestanding environments, by [@t-mat](https://togithub.com/t-mat) - build: `make` and `make test` are compatible with `-j` parallel run - build: AS/400 compatibility, by [@jonrumsey](https://togithub.com/jonrumsey) - build: Solaris 10 compatibility, by [@pekdon](https://togithub.com/pekdon) - build: MSVC 2022 support, by [@t-mat](https://togithub.com/t-mat) - build: improved meson script, by [@eli-schwartz](https://togithub.com/eli-schwartz) - doc : Updated LZ4 block format, provide an "implementation notes" section #### New Contributors - [@emaxerrno](https://togithub.com/emaxerrno) made their first contribution in [https://github.com/lz4/lz4/pull/884](https://togithub.com/lz4/lz4/pull/884) - [@servusdei2018](https://togithub.com/servusdei2018) made their first contribution in [https://github.com/lz4/lz4/pull/886](https://togithub.com/lz4/lz4/pull/886) - [@aqrit](https://togithub.com/aqrit) made their first contribution in [https://github.com/lz4/lz4/pull/898](https://togithub.com/lz4/lz4/pull/898) - [@attilaolah](https://togithub.com/attilaolah) made their first contribution in [https://github.com/lz4/lz4/pull/919](https://togithub.com/lz4/lz4/pull/919) - [@XVilka](https://togithub.com/XVilka) made their first contribution in [https://github.com/lz4/lz4/pull/922](https://togithub.com/lz4/lz4/pull/922) - [@hmaarrfk](https://togithub.com/hmaarrfk) made their first contribution in [https://github.com/lz4/lz4/pull/962](https://togithub.com/lz4/lz4/pull/962) - [@ThomasWaldmann](https://togithub.com/ThomasWaldmann) made their first contribution in [https://github.com/lz4/lz4/pull/965](https://togithub.com/lz4/lz4/pull/965) - [@sigiesec](https://togithub.com/sigiesec) made their first contribution in [https://github.com/lz4/lz4/pull/964](https://togithub.com/lz4/lz4/pull/964) - [@klebertarcisio](https://togithub.com/klebertarcisio) made their first contribution in [https://github.com/lz4/lz4/pull/973](https://togithub.com/lz4/lz4/pull/973) - [@jasperla](https://togithub.com/jasperla) made their first contribution in [https://github.com/lz4/lz4/pull/972](https://togithub.com/lz4/lz4/pull/972) - [@GabeNI](https://togithub.com/GabeNI) made their first contribution in [https://github.com/lz4/lz4/pull/1001](https://togithub.com/lz4/lz4/pull/1001) - [@ITotalJustice](https://togithub.com/ITotalJustice) made their first contribution in [https://github.com/lz4/lz4/pull/1005](https://togithub.com/lz4/lz4/pull/1005) - [@lifegpc](https://togithub.com/lifegpc) made their first contribution in [https://github.com/lz4/lz4/pull/1000](https://togithub.com/lz4/lz4/pull/1000) - [@eloj](https://togithub.com/eloj) made their first contribution in [https://github.com/lz4/lz4/pull/1011](https://togithub.com/lz4/lz4/pull/1011) - [@pekdon](https://togithub.com/pekdon) made their first contribution in [https://github.com/lz4/lz4/pull/999](https://togithub.com/lz4/lz4/pull/999) - [@fanzeyi](https://togithub.com/fanzeyi) made their first contribution in [https://github.com/lz4/lz4/pull/1017](https://togithub.com/lz4/lz4/pull/1017) - [@a1346054](https://togithub.com/a1346054) made their first contribution in [https://github.com/lz4/lz4/pull/1024](https://togithub.com/lz4/lz4/pull/1024) - [@kmou424](https://togithub.com/kmou424) made their first contribution in [https://github.com/lz4/lz4/pull/1026](https://togithub.com/lz4/lz4/pull/1026) - [@kostasdizas](https://togithub.com/kostasdizas) made their first contribution in [https://github.com/lz4/lz4/pull/1030](https://togithub.com/lz4/lz4/pull/1030) - [@fwessels](https://togithub.com/fwessels) made their first contribution in [https://github.com/lz4/lz4/pull/1032](https://togithub.com/lz4/lz4/pull/1032) - [@zeux](https://togithub.com/zeux) made their first contribution in [https://github.com/lz4/lz4/pull/1040](https://togithub.com/lz4/lz4/pull/1040) - [@DimitriPapadopoulos](https://togithub.com/DimitriPapadopoulos) made their first contribution in [https://github.com/lz4/lz4/pull/1042](https://togithub.com/lz4/lz4/pull/1042) - [@mcfi](https://togithub.com/mcfi) made their first contribution in [https://github.com/lz4/lz4/pull/1054](https://togithub.com/lz4/lz4/pull/1054) - [@eli-schwartz](https://togithub.com/eli-schwartz) made their first contribution in [https://github.com/lz4/lz4/pull/1049](https://togithub.com/lz4/lz4/pull/1049) - [@leonvictor](https://togithub.com/leonvictor) made their first contribution in [https://github.com/lz4/lz4/pull/1052](https://togithub.com/lz4/lz4/pull/1052) - [@tristan957](https://togithub.com/tristan957) made their first contribution in [https://github.com/lz4/lz4/pull/1064](https://togithub.com/lz4/lz4/pull/1064) - [@anjiahao1](https://togithub.com/anjiahao1) made their first contribution in [https://github.com/lz4/lz4/pull/1068](https://togithub.com/lz4/lz4/pull/1068) - [@danyeaw](https://togithub.com/danyeaw) made their first contribution in [https://github.com/lz4/lz4/pull/1075](https://togithub.com/lz4/lz4/pull/1075) - [@yawqi](https://togithub.com/yawqi) made their first contribution in [https://github.com/lz4/lz4/pull/1093](https://togithub.com/lz4/lz4/pull/1093) - [@nathannaveen](https://togithub.com/nathannaveen) made their first contribution in [https://github.com/lz4/lz4/pull/1088](https://togithub.com/lz4/lz4/pull/1088) - [@alexmohr](https://togithub.com/alexmohr) made their first contribution in [https://github.com/lz4/lz4/pull/1094](https://togithub.com/lz4/lz4/pull/1094) - [@yoniko](https://togithub.com/yoniko) made their first contribution in [https://github.com/lz4/lz4/pull/1100](https://togithub.com/lz4/lz4/pull/1100) - [@jonrumsey](https://togithub.com/jonrumsey) made their first contribution in [https://github.com/lz4/lz4/pull/1104](https://togithub.com/lz4/lz4/pull/1104) - [@dpelle](https://togithub.com/dpelle) made their first contribution in [https://github.com/lz4/lz4/pull/1125](https://togithub.com/lz4/lz4/pull/1125) - [@SpaceIm](https://togithub.com/SpaceIm) made their first contribution in [https://github.com/lz4/lz4/pull/1133](https://togithub.com/lz4/lz4/pull/1133) ### [`v1.9.3`](https://togithub.com/lz4/lz4/releases/tag/v1.9.3) [Compare Source](https://togithub.com/lz4/lz4/compare/v1.9.2...v1.9.3) LZ4 `v1.9.3` is a maintenance release, offering more than 200+ commits to fix multiple corner cases and build scenarios. Update is recommended. Existing `liblz4` API is not modified, so it should be a drop-in replacement. ##### Faster Windows binaries On the build side, multiple rounds of improvements, thanks to contributors such as [@wolfpld](https://togithub.com/wolfpld) and [@remittor](https://togithub.com/remittor), make this version generate **faster binaries for Visual Studio**. It is also expected to better support a broader range of VS variants. Speed benefits can be substantial. For example, on my laptop, compared with `v1.9.2`, this version built with VS2019 compresses at 640 MB/s (from 420 MB/s), and decompression reaches 3.75 GB/s (from 3.3 GB/s). So this is definitely perceptible. ##### Other notable updates Among the visible fixes, this version improves the `_destSize()` variant, an advanced API which reverses the logic by targeting an a-priori compressed size and trying to shove as much data as possible into the target budget. The high compression variant `LZ4_compress_HC_destSize()` would miss some important opportunities in highly compressible data, resulting in less than optimal compression (detected by [@hsiangkao](https://togithub.com/hsiangkao)). This is fixed in this version. Even the "fast" variant receives some gains (albeit very small). Also, the corresponding decompression function, `LZ4_decompress_safe_partial()`, officially supports a scenario where the input (compressed) size is unknown (but bounded), as long as the requested amount of data to regenerate is smaller or equal to the block's content. This function used to require the exact compressed size, and would sometimes support above scenario "by accident", but then could also break it by accident. This is now firmly controlled, documented and tested. Finally, replacing memory functions (`malloc()`, `calloc()`, `free()`), typically for freestanding environments, is now a bit easier. It used to require a small direct modification of `lz4.c` source code, but can now be achieved by using the build macro `LZ4_USER_MEMORY_FUNCTIONS` at compilation time. In which case, `liblz4` no longer includes `Configuration
📅 Schedule: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined).
🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.
♻ Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.
🔕 Ignore: Close this PR and you won't be reminded about this update again.
This PR has been generated by Mend Renovate. View repository job log here.