Releases: zlib-ng/zlib-ng
2.1.6
This is a stable release, with several minor improvements and one corruption fix for inflateCopy().
This release also improves on the functable implementation, and also moves its initialization to happen in deflateInit() and inflateInit(). We also have some optimizations for RVV and ARM.
Notes for packagers:
- FAR macro has been added back to zlib-compat mode in this release, please remember to remove downstream patches that add it.
- Please consider removing CMake
INSTALL_LIB_DIR
workarounds, this should not be needed since v2.0.2 (2021), but packagers seem to keep copying the workaround from each other. Please see cmake/detect-install-dirs.cmake.
Changes
- Fix inflateCopy corruption caused by change in 2.1.4 #1628
- This is a regression caused by a change introduced in 2.1.4
-
Functable
-
API
- Add FAR macro to zlib-compat headers to improve compatibility #1637
-
ARM
-
RVV
- Optimize adler32_fold_copy using RVV #1597
-
x86
- Simplify AVX2 and AVX512 adler32_fold_copy by removing templates #1599
-
Buildsystem
- Don't attempt ARMv6 detection on AARCH64 #1617
- Prevent tests writing into source directory #1604
- CMake: Fix clang-cl warnings #1591
- CMake: Export cmake target #1601 #1611
- CMake: Remove duplicate enable tests option #1610
- CMake: Fix reading version information from zlib.h.in #1614
- CMake: Check whether compiler supports -march=native or -mcpu=native #1618
- CMake: Always run compiler feature tests without LTO #1622
- CMake: Make sure uqsub16 check doesn't get optimized away with LTO #1619
- CMake: Update to GoogleTest 1.12.1 #1623
- CI: Add linter workflow for whitespace errors #1625 #1632
- CI: Cancel outdated running CI jobs for PR or branch #1629
- CI: Added CI instance for WITH_NATIVE_INSTRUCTIONS #1634
- Tests: Fix buffer overflow in compare256_rle benchmark #1612
-
Misc
- Update copyright to sync with zlib 1.3 #1615
2.1.5
This is a hotfix release, fixing an issue where certain applications would fail with a checksum error during inflate (decompression).
A few minor fixes and improvements are also included.
2.1.4
This is a stable release, with several minor improvements and one fix for a possible buffer overrun while using inflateCopy().
Zlib-ng's zlib-compat mode is now targeting zlib 1.3 compatibility.
Of note, we have new optimizations for ARM and Risc-V RVV, and a lot of fixes and improvements to the buildsystem.
-
Fix: inflateCopy() allocate window with padding #1583
-
Pull zlib 1.3 changes #1563
-
API
- Deprecate ZLIBNG_VER_STATUS, use ZLIBNG_VER_STATUSH #1581
-
MacOS
- Relocatable pkg config files, @rpath/ install name on macOS #1546
-
MinGW
-
ARM
-
Loongarch
- Initial loongarch port #1537
-
PowerPC
- Fix building benchmarks on 32-bit PowerPC #1588
-
RVV
-
x86
-
Buildsystem
- Improve intrinsics detection: ensure intrinsics are not optimized out #1562
- CMake: Fix cross-compiling benchmarks and libpng #1589
- CMake: Fix examining value of GENERATOR_IS_MULTI_CONFIG #1575
- CMake: Fix Match CMAKE_GENERATOR_TOOLSET #1577
- CMake: Cleanup handling of march=native #1544 #1578
- CMake: Add CPack capability #1556 #1579
- Configure: Remove march=native support #1555
- Configure: use dash not bash #1561
- Configure: Fix disabling deflate_quick and deflate_medium #1545
- Configure: Fix distclean #1530
-
Misc
Thanks to all the contributors this release looks to be the best and most stable one so far. 🎉
2.1.3
This is a stable release, with several minor improvements and one fix for a possible endless loop during inflate.
The endless loop bug was detected using unpigz, and is likely a rare corner case that was exposed by pigz threading.
We also have optimizations for the upcoming Risc-V RVV instruction set.
Changes since 2.1.2:
2.1.2
This is the first stable release of the 2.1.x
branch.
The changes since beta2 are minor, no changes to code, only buildsystem and tests.
Changes since 2.1.0-Beta2:
- Stop using
COMMAND_ECHO
in ctests, it is not supported in older than CMake 3.15. - Add MIPS/MIPS64 CI tests.
- Fix
make distclean
command with configure/Makefile. - Fix using configure/Makefile on architecture without a directory under
arch
.
Full release notes for the first 2.1 stable release:
This release contains two years of development and improvements to zlib-ng, as well as fixes and changes inherited from zlib.
The 2.1.x version series has new targeted minumum buildsystem versions, as detailed on the Wiki https://github.com/zlib-ng/zlib-ng/wiki
Buildsystem:
- Many improvements to the CMake scripts.
- Improved support for detecting memory alignment functions.
- Improved support for unaligned access by letting the compiler promote code to unaligned if supported by the CPU.
- Remove x86 cpu feature detection for TZCNT, safely fallback to BSF.
- Enable using AVX512 intrinsics with GCC <9.
Optimizations and Enhancements:
- Decompression is a lot faster (56% faster measured on AVX2-capable x86-64)
- Compresson is improved for Level 9, at the cost of a little performance.
- Compression is improved for Level 3, by switching from deflate_fast to deflate_medium.
- Levels 3 and 4 have been reconfigured to provide a better gradual tradeoff for speed/compression between levels 2 and 5.
- Deflate_quick (Level 1) has been improved to default to a bigger windowsize and support changing the window size like the other levels.
- Deflate_rle has been optimized with its own compare_256 implementation.
New instruction set optimizations:
- Adler32 implementation using AVX512, AVX512-VNNI, VMX.
- CRC32-B implementation using VPCLMULQDQ & IBM-Z.
- Slide hash implementation using VMX.
- Compare256 implementations using SSE2, Neon, & POWER9.
- Inflate chunk copying using SSSE3 & VSX.
Compatibility and Porting:
- CRC-32 computation changes from madler/zlib. zlib-ng/zlib-ng#a6155234
- Compatible and up-to-date with zlib 1.2.13.
- Removed the usage of macros in zlib-ng.h, making life easier for languages that want to call the C functions without having the C preprocessor (Python, etc).
Improved support more environments:
- Apple M1
- vcpkg
- Emscripten
Testing:
- Tests have been converted to use GTest. Many new tests have also been added.
- Gbench support has been added to easily benchmark changes to performance-critical functions.
- Many new tests added
Misc:
- Several pieces of core code has been restructured or rewritten.
- Too many changes to list here, see the git commit log for the full list of changes.
Deprecations:
- Configure no longer has the full range of tests.
- NMake is no longer actively supported and tested, it is now community supported.
- See the wiki for minimum build system versions and deprecations https://github.com/zlib-ng/zlib-ng/wiki
2.1.1-beta2
This is the second beta of the 2.1.x
branch.
The changes since beta1 are relatively minor, and mostly buildsystem fixes, improved testing, and there is also one minor fix for zlib-compat mode.
This release also has two new optimalizations, one good improvement for deflate_rle, and one microoptimalization for AVX512 CRC32.
Changes since 2.1.0-Beta1:
- Fix missing exported z_size_t type in zlib.h (zlib-compat mode).
- Fix two Coverity warnings
- Fix CMake GNUInstallDirs usage
- Improved AVX512-VNNI compiler feature detection, for compilers with early AVX512-VNNI support (GCC8.0 etc)
- Microptimalization for AVX512 implementation of CRC32
- Optimized deflate_rle compression, also added related test and benchmark.
- Add testing of file_compress/file_uncompress in minigzip/minideflate
- Add deflate_fast to switchlevels test
- Add emulated RISC-V to CI test workflow
- Fix abicheck CI test was not ignoring version string
- Fix MinGW CI test, broken by Github Actions VM image updates
2.1.0-beta1
This release contains two years of development and improvements to zlib-ng, as well as fixes and changes inherited from zlib.
The 2.1.x version series has new targeted minumum buildsystem versions, as detailed on the Wiki https://github.com/zlib-ng/zlib-ng/wiki
Buildsystem:
- Many improvements to the CMake scripts.
- Improved support for detecting memory alignment functions.
- Improved support for unaligned access by letting the compiler promote code to unaligned if supported by the CPU.
- Remove x86 cpu feature detection for TZCNT, safely fallback to BSF.
- Enable using AVX512 intrinsics with GCC <9.
Optimizations and Enhancements:
- Decompression is a lot faster (56% faster measured on AVX2-capable x86-64)
- Compresson is improved for Level 9, at the cost of a little performance.
- Compression is improved for Level 3, by switching from deflate_fast to deflate_medium.
- Levels 3 and 4 have been reconfigured to provide a better gradual tradeoff for speed/compression between levels 2 and 5.
- Deflate_quick (Level 1) has been improved to default to a bigger windowsize and support changing the window size like the other levels.
New instruction set optimizations:
- Adler32 implementation using AVX512, AVX512-VNNI, VMX.
- CRC32-B implementation using VPCLMULQDQ & IBM-Z.
- Slide hash implementation using VMX.
- Compare256 implementations using SSE2, Neon, & POWER9.
- Inflate chunk copying using SSSE3 & VSX.
Compatibility and Porting:
- CRC-32 computation changes from madler/zlib. zlib-ng/zlib-ng#a6155234
- Compatible and up-to-date with zlib 1.2.13.
- Removed the usage of macros in zlib-ng.h, making life easier for languages that want to call the C functions without having the C preprocessor (Python, etc).
Improved support more environments:
- Apple M1
- vcpkg
- Emscripten
Testing:
- Tests have been converted to use GTest. Many new tests have also been added.
- Gbench support has been added to easily benchmark changes to performance-critical functions.
Misc:
- Several pieces of core code has been restructured or rewritten.
- Too many changes to list here, see the git commit log for the full list of changes.
Deprecations:
- Configure no longer has the full range of tests.
- NMake is no longer actively supported and tested, it is now community supported.
- See the wiki for minimum build system versions and deprecations https://github.com/zlib-ng/zlib-ng/wiki
2.0.7
Stable release 2.0.7 by @Dead2 in #1393
This update backports a lot of fixes and improvements.
A side effect of the improved windowsize handling for deflate_quick means compression level 1 now compresses quite a bit better by default but is also about 4.5% faster (tested on x86-64).
This is the last 2.0.x release where we will do a lot of backporting, from now on we will only backport important fixes if deemed necessary.
2.1 has diverged a lot from 2.0 making backporting a lot of work, and 2.1 is also getting close to becoming release-ready.
In the future, we will also target making smaller incremental releases.
Changes since 2.0.6:
- Fix CVE-2022-37434 #1328
- Fix chunkmemset #1196
- Fix deflateBound too small #1236
- Fix Z_SOLO #1263
- Fix ACLE variant of crc32 #1274
- Fix inflateBack #1311
- Fix deflate_quick windowsize #1431
- Fix DFLTCC bugs related to adler32 #1349 and #1390
- Fix warnings #1194 #1312 #1362
- MacOS build fix #1198
- Add invalid windowBits handling #1293
- Support for Force TZCNT #1186
- Support for aligned_alloc() #1360
- Minideflate improvements #1175 #1238
- Dont use unaligned access for memcpy #1309
- Build system #1209 #1233 #1267 #1273 #1278 #1292 #1316 #1318 #1365
- Test improvements #1208 #1227 #1241 #1353
- Cleanup #1266
- Documentation #1205 #1359
- Misc improvements #1294 #1297 #1306 #1344 #1348
- Backported zlib fixes
- Backported CI workflows from Develop branch
Full Changelog: 2.0.6...2.0.7
2.0.6 - Christmas Special
This update backports a few fixes and a lot of improvements to the tests.
The most important fix is the one that fixes potential hangs on macOS.
The buffer overwrite in minideflate is not as severe because the minideflate tool is primarily used for testing, and likely not widely used by others.
The incorrect deflateBound and compressBound might cause reduced performance or potentially compression failure if the application does not re-try compression when zlib-ng runs out of space in the output buffer.
Changes since 2.0.5:
- Fix hangs on macOS #1031
- Fix minideflate write buffers being overwritten #1060
- Fix deflateBound and compressBound returning too small size estimates #1049 #1071
- Fix incorrect function declaration warning #1080
- Fix build problems when building outside of source dir #1049
- Fix build problems on arm2-7 #1030
- Fixed some compile warnings #1020 #1036 #1037 #1048
- Improved posix memalign support #888
- Improvements to testing #637 #1026 #1032 #1035 #1049 #1051 #1056 #1063 #1067
- Improvements for integration into other projects #1022 #1042
- Code style fixes #637 #1040 #1050 #1075
2.0.5
This update fixes another corruption during inflate, this time only affecting ARM, so far only observed when using pigz.
There is also multiple minor improvements.