De release van versie 0.9.0 van de bibliotheek en cross-platform console-tool heeft plaatsgevonden ZXC (github.com), die hoge prestaties bieden met multithreading asymmetrische compressie zonder verlies en geoptimaliseerd voor game-assets, firmware en applicatiepakketten. Het formaat is ontwikkeld op basis van het principe van 'eens schrijven, meermalen lezen' (WORM).
In tegenstelling tot codecs zoals LZ4, offer ZXC de compressiesnelheid op voor maximale doorvoersnelheid bij het uitpakken.
De decompressiesnelheid is meer dan 40% sneller dan LZ4 op Apple Silicon, meer dan 25% sneller op Google Axion (ARM64) en meer dan 5% sneller op x86_64, terwijl in alle gevallen een hogere compressieverhouding wordt gegarandeerd.
Deze release introduceert een API voor herbruikbare contexten, de mogelijkheid om blokformaten in te stellen, een uitgebreide referentiegids voor API en ABI, en verschillende beveiligingsfixes, waaronder de oplossing van een buffer overflow-kwetsbaarheid die werd ontdekt tijdens de fuzzing van de compressiemodule.
Deze release bevat wijzigingen die de ABI breken, daarom is de SOVERSION verhoogd naar 2.
Het project is geschreven in C en wordt verspreid onder de BSD 3-licentie.
Details
- Wijzigingen die tot incompatibiliteit leiden:
- SOVERSION 2: De ABI-versie van de bibliotheek is verhoogd. Binaire bestanden die zijn gecompileerd onder SOVERSION 1 moeten opnieuw worden gecompileerd.
- Optiestructuren: de functies zxc_compress() en zxc_decompress() nemen nu zxc_compress_opts_t* en zxc_decompress_opts_t* in plaats van positionele parameters. Voor standaardgedrag kunt u NULL doorgeven.
- Blokgrootte codering: De bestandsheader slaat nu de blokgrootte op in de vorm van een exponent log2 [12..21] in plaats van de eerdere codering met twee schalen. De oude waarde 64 wordt nog steeds geaccepteerd voor compatibiliteit.
- Nieuwe mogelijkheden:
- Opaque compressie- en decompressiecontexten, toegewezen in de heap, die de overhead voor geheugenallocatie bij elke aanroep elimineren; ideaal voor besturingssystemen (squashfs, dwarfs) en batchverwerking:
- zxc_create_cctx(), zxc_free_cctx() en zxc_compress_cctx() voor compressie;
- zxc_create_dctx(), zxc_free_dctx() en zxc_decompress_dctx() voor decompressie;
- interne buffers worden alleen opnieuw toegewezen als de waarde block_size of level verandert tussen aanroepen.
- Opaque compressie- en decompressiecontexten, toegewezen in de heap, die de overhead voor geheugenallocatie bij elke aanroep elimineren; ideaal voor besturingssystemen (squashfs, dwarfs) en batchverwerking:
- Instelbare blokgroottes:
- de blokgrootte kan nu worden ingesteld met het veld block_size in de structuur zxc_compress_opts_t;
- toegestane reeks: van 4 KB tot 2 MB (macht van twee);
- standaardwaarde blijft 256 KB;
- er is een nieuwe parameter —block-size (of -B) aan de consoletool zxc toegevoegd met ondersteuning voor eenheidsafkortingen (4K, 1M of 4KB, 1MB, enz.).
- Snelle directe decompressie:
- wanneer de doelbuffer voldoende is gevuld, wordt bij het uitpakken de tussentijdse kopie naar de werkbuffer overgeslagen, wat de geheugenbelasting vermindert en de latentie verkort.
- Veiligheid en stabiliteit:
- buffer overflow in zxc_bitpack_stream_32 is fixed: the packing loop could write up to 4 bytes outside the output buffer if the last packed value crossed a byte boundary;
- stream check during unpacking (in zxc_decompress.c) is fixed: a check is added to ensure that the size of the sequence stream is sufficient for the claimed number of sequences, which prevents reading beyond the allowed range.
- block size check: the functions zxc_cctx_init() and zxc_read_file_header() now check that block sizes are within the range [ZXC_BLOCK_SIZE_MIN, ZXC_BLOCK_SIZE_MAX] and are powers of two;
- C++ compatibility: all public header files now contain extern "C" protective constructs for seamless use in C++;
- test case storage for fuzz testing: persistent storage setup for ClusterFuzzLite CI.
- Documentation:
- docs/API.md: a new comprehensive guide to the API and ABI, detailing all 21 exported symbols, type definitions, visibility strategy, ABI versioning, thread safety guarantees, and error handling patterns;
- man and README file updated with installation instructions and package status information (vcpkg, Conan, Homebrew);
- file updated docs/FORMAT.md with block size encoding description based on exponent.
- Wrappers for Python, Rust, and Node.js updated.
Bron: linux.org.ru
