Megjelent a 0.9.0 verzió a könyvtár és a többplatformos konzolos eszköz számára ZXC (github.com), amely nagy teljesítményű több szálon végrehajtott aszimmetrikus tömörítést veszteségmentes és optimalizált a játékos erőforrások, firmware-ek és alkalmazáscsomagok számára. A formátum a „írj egyszer, olvass sokszor” (WORM) elve szerint készült.
Ellentétben az olyan kodekekkel, mint az LZ4, a ZXC a kicsomagolás maximális átbocsátóképessége érdekében feláldozza a tömörítési sebességet.
A kicsomagolási sebesség 40%-kal magasabb, mint az LZ4 Apple Siliconon, 25%-kal magasabb a Google Axion (ARM64) esetén, és 5%-kal magasabb az x86_64-nél, mindeközben mindhárom esetben magasabb tömörítési arányt biztosít.
Ebben a kiadásban bemutatásra került egy újrahasználható kontextus API, blokkméret testreszabási lehetőségek, teljes API és ABI referenciakönyv, valamint számos biztonsági javítás, köztük a heap túlfutásos sebezhetőség kijavítása, amely a tömörítő modul fázis tesztelése során lett felfedezve.
Ez a kiadás ABI-törést tartalmaz, ezért a SOVERSION 2-re emelkedett.
A projekt C nyelven íródott, és BSD 3 licenc alatt terjesztik.
Részletek
- Inkompatibilitást okozó változások:
- SOVERSION 2: A könyvtár ABI verziója megemelkedett. Az SOVERSION 1 alapján lefordított bináris fájlokat újra kell fordítani.
- Opciós szerkezetek: a zxc_compress() és zxc_decompress() funkciók mostantól zxc_compress_opts_t* és zxc_decompress_opts_t* típusú paramétereket fogadnak el a pozicionális paraméterek helyett. Az alapértelmezett viselkedéshez NULL-t kell átadni.
- A blokk méretének kódolása: A fájl fejléc most a blokk méretét log2 [12..21] kitevőként tárolja a korábbi kakszintű kódolás helyett. A régi 64-es érték továbbra is elfogadott a visszafelé kompatibilitás érdekében.
- Új lehetőségek:
- Átláthatatlan tömörítési és kicsomagolási kontextusok, amelyek a heap-en kerülnek kiosztásra, eltüntetve ezzel a memóriaallokálás költségeit minden egyes hívás során; tökéletesek fájlrendszer pluginokhoz (squashfs, dwarfs) és batch feldolgozáshoz:
- zxc_create_cctx(), zxc_free_cctx() és zxc_compress_cctx() a tömörítéshez;
- zxc_create_dctx(), zxc_free_dctx() és zxc_decompress_dctx() a kicsomagoláshoz;
- A belső pufferek csak akkor kerülnek újraelosztásra, ha a hívások között a block_size vagy level értéke megváltozik.
- Átláthatatlan tömörítési és kicsomagolási kontextusok, amelyek a heap-en kerülnek kiosztásra, eltüntetve ezzel a memóriaallokálás költségeit minden egyes hívás során; tökéletesek fájlrendszer pluginokhoz (squashfs, dwarfs) és batch feldolgozáshoz:
- Testreszabható blokk méretek:
- A blokk mérete mostantól a zxc_compress_opts_t struktúra block_size mezőjével állítható be;
- elfogadott tartomány: 4 KB-tól 2 MB-ig (kettő hatványa);
- alapértelmezés szerint az érték továbbra is 256 KB marad;
- Az zxc konzolos eszközhöz új paraméter került hozzáadásra —block-size (vagy -B), ami támogatja az mértékegységek utótagjait (4K, 1M vagy 4KB, 1MB stb.).
- Gyors közvetlen kicsomagolás:
- amikor a célpuffer elegendően telítve van, a kicsomagolás során kihagyásra kerül az átmeneti másolás a munkapufferbe, így csökkentve a memória terhelést és csökkentve a késleltetést.
- Biztonság és stabilitás:
- Javították a heaped buffer overflow-t a zxc_bitpack_stream_32-ben: a tömörítési ciklus akár 4 bájtot is írhatott a kimeneti pufferen túl, ha az utolsó tömörített érték átlépte a byte határt;
- Javították a stream ellenőrzést a kitömörítés során (a zxc_decompress.c-ben): ellenőrzés került hozzáadásra, amely biztosítja, hogy a szekvenciák stream mérete elegendő a bejelentett számú szekvenciához, megakadályozva ezzel a megengedett tartományon túl történő olvasást.
- A blokk méretének ellenőrzése: mostantól a zxc_cctx_init() és zxc_read_file_header() funkciókban ellenőrzés történik, hogy a blokkméretek a [ZXC_BLOCK_SIZE_MIN, ZXC_BLOCK_SIZE_MAX] tartományban vannak és kettes hatványai;
- C++ kompatibilitás: az összes nyilvános fejlécfájl mostantól extern "C" védő szerkezeteket tartalmaz a problémamentes C++ használathoz;
- Tesztminta tárolása fuzzing teszteléshez: beállították a tartós tárolást a ClusterFuzzLite CI-hez.
- kódkönyvtárra lépésével érheti el.:
- docs/API.md: új, átfogó API és ABI útmutató, amely leírja az összes 21 exportált szimbólumot, típuskonstrukciókat, láthatósági stratégiát, ABI verziókezelést, szálbiztonsági garanciákat és hibakezelési mintákat;
- Frissítették a man oldalakat és a README fájlt telepítési utasításokkal és csomagok állapotával (vcpkg, Conan, Homebrew);
- Frissített fájl docs/FORMAT.md a blokk méretének kódolásáról szóló leírással.
- Frissítették a Python, Rust és Node.js wrapper-eket.
Forrás: linux.org.ru
