ZXC 0.9.0

ZXC 0.9.0 ZXC 0.9.0 ZXC 0.9.0 ZXC 0.9.0

Die Version 0.9.0 der Bibliothek und plattformunabhängigen Konsolenanwendung wurde veröffentlicht ZXC (github.com), die hochleistungsfähige Mehrkern- asymmetrische Kompression verlustfrei und optimiert für Spielressourcen, Firmware und Anwendungs-Pakete. Das Format wurde nach dem Prinzip "einmal schreiben, mehrfach lesen" (WORM) entwickelt.

Im Gegensatz zu Codecs wie LZ4 opfert ZXC die Komprimierungsgeschwindigkeit zugunsten einer maximalen Durchsatzrate beim Dekomprimieren.

Die Entpackgeschwindigkeit wird mit über 40 % besser angegeben als bei LZ4 auf Apple Silicon, über 25 % auf Google Axion (ARM64) und über 5 % auf x86_64, wobei in allen Fällen ein höherer Kompressionsfaktor sichergestellt wird.

In dieser Version wird eine API für wiederverwendbare Kontexte, die Möglichkeit zur Anpassung der Blockgrößen, eine vollständige Referenzdokumentation für API und ABI sowie mehrere sicherheitsrelevante Bugfixes vorgestellt, einschließlich der Behebung einer Heap-Überlaufanfälligkeit, die beim Fuzzing des Komprimierungsmoduls entdeckt wurde.

Diese Version enthält ABI-ändernde Änderungen, daher wurde die SOVERSION auf 2 erhöht.

Das Projekt ist in C geschrieben und wird unter der BSD 3-Lizenz verteilt.

Details
  • Änderungen, die zu Inkompatibilität führen:
    • SOVERSION 2: Die ABI-Version der Bibliothek wurde erhöht. Binärdateien, die unter SOVERSION 1 kompiliert wurden, müssen neu kompiliert werden.
    • Optionen für Strukturen: Die Funktionen zxc_compress() und zxc_decompress() akzeptieren jetzt zxc_compress_opts_t* und zxc_decompress_opts_t* anstelle von positionsbasierten Parametern. Um das Standardverhalten zu erreichen, übergeben Sie NULL.
    • Blockgrößenkodierung: Der Dateikopf speichert die Blockgröße jetzt als Exponentialwert log2 [12..21] anstelle der bisherigen Kodierung mit zwei Skalen. Der alte Wert 64 wird weiterhin zur Rückwärtskompatibilität akzeptiert.
  • Neue Funktionen:
    • Undurchsichtige Komprimierungs- und Dekomprimierungskontexte, die im Heap zugewiesen werden und die Speicherkosten bei jedem Aufruf vermeiden; ideal für Dateisystem-Plugins (squashfs, dwarfs) und Batch-Verarbeitung:
      • zxc_create_cctx(), zxc_free_cctx() und zxc_compress_cctx() zur Komprimierung;
      • zxc_create_dctx(), zxc_free_dctx() und zxc_decompress_dctx() zur Dekomprimierung;
      • interne Puffer werden nur neu verteilt, wenn sich der Wert block_size oder level zwischen den Aufrufen ändert.
  • Anpassbare Blockgrößen:
    • Die Blockgröße kann jetzt über das Feld block_size in der Struktur zxc_compress_opts_t angepasst werden;
    • erlaubter Bereich: von 4 KB bis 2 MB (Potenzen von zwei);
    • standardmäßig bleibt der Wert bei 256 KB;
    • In das Konsolenprogramm zxc wurde ein neuer Parameter —block-size (oder -B) mit Unterstützung für Maßeinheitensuffixe (4K, 1M oder 4KB, 1MB usw.) hinzugefügt.
  • Schnelle direkte Dekompression:
    • wenn der Zielpuffer ausreichend gefüllt ist, wird bei der Dekomprimierung das Zwischenkopieren in den Arbeitsbuffer übersprungen, was die Speicherauslastung senkt und die Latenz verringert.
  • Sicherheit und Stabilität:
    • Ein Heap-Pufferüberlauf in zxc_bitpack_stream_32 wurde behoben: Die Verpackungsschleife konnte bis zu 4 Bytes über den Ausgangspuffer hinaus schreiben, wenn der letzte verpackte Wert die Bytegrenze überschritt.
    • Die Überprüfung des Streams bei der Dekomprimierung (in zxc_decompress.c) wurde behoben: Eine Überprüfung wurde hinzugefügt, die gewährleistet, dass die Größe des Stream von Sequenzen ausreichend für die angegebene Anzahl von Sequenzen ist, um das Lesen außerhalb des erlaubten Bereichs zu verhindern.
    • Überprüfung der Blockgröße: Jetzt wird in den Funktionen zxc_cctx_init() und zxc_read_file_header() überprüft, ob die Blockgrößen im Bereich [ZXC_BLOCK_SIZE_MIN, ZXC_BLOCK_SIZE_MAX] liegen und Potenzen von zwei sind.
    • Kompatibilität mit C++: Alle öffentlichen Header-Dateien enthalten jetzt Schutzkonstruktionen extern "C", um die Verwendung in C++ zu vereinfachen.
    • Speicherung des Testkorpus für Fuzzing-Tests: Ein permanentes Speichersystem für ClusterFuzzLite CI wurde eingerichtet.
  • Dokumentation:
    • docs/API.md: Ein neuer umfassender API- und ABI-Leitfaden, der alle 21 exportierten Symbole, Typdefinitionen, Sichtbarkeitsstrategien, ABI-Versionierung, Garantien für Thread-Sicherheit und Fehlerbehandlungsmuster beschreibt.
    • Die man-Seiten und die README-Datei wurden mit Installationsanweisungen und Informationen zum Paketstatus (vcpkg, Conan, Homebrew) aktualisiert.
    • Die Datei wurde aktualisiert. docs/FORMAT.md mit einer Beschreibung der Blockgrößenkodierung basierend auf Exponenten.
  • Die Wrapper für Python, Rust und Node.js wurden aktualisiert.

Quelle: linux.org.ru

60GB SSD 8Gb DDR4