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 plattformübergreifenden Konsolenanwendung wurde veröffentlicht. ZXC (github.com), das hochleistungsfähige Multithreading- asymmetrische Kompression verlustfrei und optimiert für Gaming-Ressourcen, Firmware und Anwendungs-Pakete. Das Format wurde nach dem Prinzip „einmal schreiben, mehrmals lesen“ (WORM) entwickelt.

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

Die Deklaration der Entpackgeschwindigkeit liegt 40 %+ über der von LZ4 auf Apple Silicon, 25 %+ über auf Google Axion (ARM64) und 5 %+ über auf x86_64, wobei in allen Fällen ein höherer Kompressionsfaktor gewährleistet wird.

In diesem Release wird eine API für wiederverwendbaren Kontext, die Möglichkeit zur Blockgrößeneinstellung, ein vollständiges Referenzhandbuch für API und ABI sowie mehrere sicherheitsrelevante Bugfixes vorgestellt, darunter die Behebung einer Heap-Pufferüberlaufanfälligkeit, die während des Fuzzings des Komprimierungsmoduls entdeckt wurde.

Diese Veröffentlichung umfasst Änderungen, die die ABI beeinträchtigen, weshalb die SOVERSION auf 2 erhöht wurde.

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

Details
  • Änderungen, die zu Inkompatibilitäten führen:
    • SOVERSION 2: Die ABI-Version der Bibliothek wurde erhöht. Binärdateien, die für SOVERSION 1 kompiliert wurden, müssen neu kompiliert werden.
    • Optionsstrukturen: Die Funktionen zxc_compress() und zxc_decompress() akzeptieren jetzt zxc_compress_opts_t* und zxc_decompress_opts_t* anstelle von Positionsparametern. Für das Standardverhalten übergeben Sie NULL.
    • Blockgrößencodierung: Der Dateiheader speichert jetzt die Blockgröße als Exponenten log2 [12..21] anstelle der vorherigen Codierung mit zwei Skalen. Der alte Wert 64 wird aus Gründen der Abwärtskompatibilität weiterhin akzeptiert.
  • Neue Funktionen:
    • Opake Komprimierungs- und Dekomprimierungskontexte, die im Heap alloziert werden, um die Speicherallokationskosten bei jedem Aufruf zu eliminieren; ideal für Dateisystem-Plugins (squashfs, dwarfs) und Batchverarbeitung:
      • zxc_create_cctx(), zxc_free_cctx() und zxc_compress_cctx() für die Kompression;
      • zxc_create_dctx(), zxc_free_dctx() und zxc_decompress_dctx() für die Dekompression;
      • Interne Puffer werden nur neu zugewiesen, wenn sich der Wert von 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;
    • zulässiger Bereich: von 4 KB bis 2 MB (Potenz von zwei);
    • Der Standardwert bleibt bei 256 KB.
    • In das Konsolenprogramm zxc wurde ein neuer Parameter —block-size (oder -B) hinzugefügt, der Einheitssuffixe unterstützt (4K, 1M oder 4KB, 1MB usw.).
  • Schnelle direkte Dekompression:
    • Wenn der Zielpuffer ausreichend gefüllt ist, wird beim Entpacken das zwischenzeitliche Kopieren in den Arbeitsbuffer übersprungen, was die Speicherauslastung verringert und die Latenz reduziert.
  • Sicherheit und Stabilität:
    • Ein Heap-Buffer-Überlauf in zxc_bitpack_stream_32 wurde behoben: Die Verpackungsschleife konnte bis zu 4 Byte über den Ausgabepuffer schreiben, wenn der letzte verpackte Wert die Bytegrenze überschritt.
    • Die Überprüfung des Streams beim Dekomprimieren (in zxc_decompress.c) wurde behoben: Eine Überprüfung wurde hinzugefügt, die sicherstellt, dass die Größe des Sequenzenstroms ausreichend für die angegebene Anzahl von Sequenzen ist, was das Auslesen außerhalb des zulässigen Bereichs verhindert.
    • Größenüberprüfung des Blocks: 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" für die nahtlose Verwendung in C++;
    • Speicherung des Testcontainers für Fuzz-Tests: Permanentes Speicher-Setup für ClusterFuzzLite CI eingerichtet.
  • Dokumentation:
    • docs/API.md: Ein neues umfassendes Verzeichnis für API und ABI, das alle 21 exportierten Symbole, Typdefinitionen, Sichtbarkeitsstrategie, ABI-Versionierung, Garantien zur Thread-Sicherheit und Fehlerbehandlungsmuster beschreibt;
    • Man- und README-Datei mit Installationsanweisungen und Paketstatusinformationen (vcpkg, Conan, Homebrew) aktualisiert;
    • Datei aktualisiert docs/FORMAT.md mit einer Beschreibung der Blockgrößenkodierung basierend auf Exponenten.
  • Wrappers für Python, Rust und Node.js aktualisiert.

Quelle: linux.org.ru

Купить надежный хостинг для сайтов с защитой от DDoS, VPS VDS серверы 🔥 Купить надежный хостинг для сайтов с защитой от DDoS, VPS VDS серверы | ProHoster