Bola vydaná verzia 0.9.0 knižnice a multiplatformového konzolového nástroja. ZXC (github.com), implementácia vysokovýkonného viacvláknového asymetrická kompresia Bezstratový a optimalizovaný pre herné dáta, firmvér a aplikačné balíky. Formát je navrhnutý na princípe „zapíš raz, prečítaj viackrát“ (WORM).
Na rozdiel od kodekov ako LZ4, ZXC pri dekompresii obetuje rýchlosť kompresie pre maximálnu priepustnosť.
Deklarovaná rýchlosť dekompresie je o 40 % a viac vyššia ako pri LZ4 na Apple Silicon, o 25 % a viac vyššia na Google Axion (ARM64) a o 5 % a viac vyššia na x86_64, pričom vo všetkých prípadoch je k dispozícii vyšší kompresný pomer.
Táto verzia predstavuje opakovane použiteľné kontextové API, možnosť prispôsobiť veľkosti blokov, kompletnú referenčnú príručku API a ABI a niekoľko opráv súvisiacich so zabezpečením vrátane opravy zraniteľnosti pretečenia vyrovnávacej pamäte založenej na halde, ktorá bola objavená počas fuzzingu kompresného modulu.
Táto verzia obsahuje zmeny, ktoré narúšajú ABI, takže hodnota SOVERSION bola zvýšená na 2.
Projekt je napísaný v jazyku C a je distribuovaný pod licenciou BSD 3.
Podrobnosti
- Zmeny vedúce k nezlučiteľnosti:
- SOVERSION 2: Verzia knižnice ABI bola zvýšená. Binárne súbory skompilované pre SOVERSION 1 je potrebné prekompilovať.
- Štruktúry volieb: Funkcie zxc_compress() a zxc_decompress() teraz akceptujú parametre zxc_compress_opts_t* a zxc_decompress_opts_t* namiesto pozičných. Pre predvolené správanie zadajte hodnotu NULL.
- Kódovanie veľkosti bloku: Hlavička súboru teraz ukladá veľkosť bloku ako log2 exponent [12..21] namiesto predchádzajúceho dvojrozmerného kódovania. Stará hodnota 64 je stále akceptovaná kvôli spätnej kompatibilite.
- Nové funkcie:
- Nepriehľadné kontexty kompresie a dekompresie s alokáciou pamäte v halde, ktoré eliminujú réžiu alokácie pamäte pri každom volaní; ideálne pre pluginy súborových systémov (squashfs, dwarfs) a dávkové spracovanie:
- zxc_create_cctx(), zxc_free_cctx() a zxc_compress_cctx() pre kompresiu;
- zxc_create_dctx(), zxc_free_dctx() a zxc_decompress_dctx() pre dekompresiu;
- Interné vyrovnávacie pamäte sa realokujú iba v prípade, že sa hodnota block_size alebo level zmení medzi volaniami.
- Nepriehľadné kontexty kompresie a dekompresie s alokáciou pamäte v halde, ktoré eliminujú réžiu alokácie pamäte pri každom volaní; ideálne pre pluginy súborových systémov (squashfs, dwarfs) a dávkové spracovanie:
- Prispôsobiteľné veľkosti blokov:
- Veľkosť bloku je teraz možné nakonfigurovať pomocou poľa block_size v štruktúre zxc_compress_opts_t;
- Prijateľný rozsah: 4 KB až 2 MB (mocnina dvoch);
- predvolená hodnota zostáva 256 KB;
- Do konzolového nástroja zxc bol pridaný nový parameter --block-size (alebo -B), ktorý podporuje prípony jednotiek (4K, 1M alebo 4KB, 1MB atď.).
- Rýchla priama dekompresia:
- Keď je cieľová vyrovnávacia pamäť dostatočne plná, dekompresia preskočí medzikópiu do pracovnej vyrovnávacej pamäte, čo znižuje zaťaženie pamäte a skracuje latenciu.
- Bezpečnosť a stabilita:
- Opravené pretečenie vyrovnávacej pamäte haldy v zxc_bitpack_stream_32: slučka balenia mohla zapísať až 4 bajty za koniec výstupnej vyrovnávacej pamäte, ak posledná balená hodnota prekročila hranicu bajtov;
- Opravená kontrola streamu pri dekompresii (v zxc_decompress.c): Pridaná kontrola, ktorá zabezpečí, že veľkosť sekvenčného streamu je dostatočná pre deklarovaný počet sekvencií, čím sa zabráni čítaniu mimo povoleného rozsahu.
- Kontrola veľkosti bloku: zxc_cctx_init() a zxc_read_file_header() teraz kontrolujú, či sú veľkosti blokov v rozsahu [ZXC_BLOCK_SIZE_MIN, ZXC_BLOCK_SIZE_MAX] a či sú mocninami dvoch;
- Kompatibilita s C++: Všetky verejné hlavičkové súbory teraz obsahujú externé ochranné konštrukty „C“ pre bezproblémové použitie v C++;
- Testovacie úložisko korpusu pre fuzz testovanie: pre ClusterFuzzLite CI bolo nakonfigurované trvalé úložisko korpusu.
- Záznamy:
- dokumentácia/API.mdNová komplexná referenčná príručka API a ABI, ktorá popisuje všetkých 21 exportovaných symbolov, definície typov, stratégiu viditeľnosti, verziovanie ABI, záruky bezpečnosti vlákien a vzory spracovania chýb;
- aktualizovaný súbor man a README s pokynmi na inštaláciu a informáciami o stave balíkov (vcpkg, Conan, Homebrew);
- súbor aktualizovaný dokumenty/FORMAT.md s popisom kódovania veľkosti bloku na základe exponentov.
- Boli aktualizované obalovacie moduly pre Python, Rust a Node.js.
Zdroj: linux.org.ru
