ZXC 0.9.0

ZXC 0.9.0 ZXC 0.9.0 ZXC 0.9.0 ZXC 0.9.0

È stata rilasciata la versione 0.9.0 della libreria e dell'utilità da riga di comando multipiattaforma ZXC (github.com), che implementa un sistema altamente performante e multithread. compressione asimmetrica senza perdite e ottimizzata per risorse di gioco, firmware e pacchetti applicativi. Il formato è stato sviluppato secondo il principio 'scrivi una volta, leggi molte volte' (WORM).

A differenza di codec come LZ4, ZXC sacrifica la velocità di compressione per massimizzare la larghezza di banda durante la decompressione.

Si dichiara una velocità di decompressione superiore al 40% rispetto a LZ4 su Apple Silicon, oltre il 25% su Google Axion (ARM64) e oltre il 5% su x86_64, garantendo in tutti i casi un tasso di compressione superiore.

In questa versione è presente un'API per contesti riutilizzabili, la possibilità di configurare la dimensione dei blocchi, una guida completa all'API e all'ABI, oltre a diverse correzioni di sicurezza, inclusa la rimozione di una vulnerabilità di overflow del buffer nella memoria heap, scoperta durante il fuzzing del modulo di compressione.

Questa release contiene modifiche che violano l'ABI, quindi la SOVERSION è aumentata a 2.

Il progetto è scritto in C e distribuito con la licenza BSD 3.

Dettagli
  • Modifiche che portano a incompatibilità:
    • SOVERSION 2: la versione ABI della libreria è stata incrementata. I file binari compilati per SOVERSION 1 devono essere ricompilati.
    • Strutture delle opzioni: le funzioni zxc_compress() e zxc_decompress() ora accettano zxc_compress_opts_t* e zxc_decompress_opts_t* invece di parametri posizionali. Per il comportamento predefinito, passare NULL.
    • Codifica della dimensione del blocco: l'intestazione del file ora memorizza la dimensione del blocco come esponente log2 [12..21] invece della precedente codifica a due scale. Il valore vecchio 64 è ancora accettato per la retrocompatibilità.
  • Nuove funzionalità:
    • Contesti di compressione e decompressione opachi, allocati nella memoria heap, che eliminano le spese generali per l'allocazione della memoria ad ogni chiamata; ideali per i plugin di filesystem (squashfs, dwarfs) e l'elaborazione batch:
      • zxc_create_cctx(), zxc_free_cctx() e zxc_compress_cctx() per la compressione;
      • zxc_create_dctx(), zxc_free_dctx() e zxc_decompress_dctx() per la decompressione;
      • i buffer interni vengono ridistribuiti solo se tra le chiamate cambia il valore di block_size o level.
  • Dimensioni dei blocchi configurabili:
    • la dimensione del blocco ora può essere configurata utilizzando il campo block_size nella struttura zxc_compress_opts_t;
    • intervallo valido: da 4 KB a 2 MB (potenza di due);
    • per impostazione predefinita, il valore rimane 256 KB;
    • è stato aggiunto un nuovo parametro alla utility da riga di comando zxc —block-size (o -B) con supporto per i suffissi delle unità di misura (4K, 1M o 4KB, 1MB, ecc.).
  • Decompressione diretta veloce:
    • quando il buffer di destinazione è sufficientemente riempito, durante la decompressione viene evitata la copia intermedia nel buffer di lavoro, riducendo il carico di memoria e riducendo la latenza.
  • Sicurezza e stabilità:
    • corretto un overflow del buffer heap in zxc_bitpack_stream_32: il ciclo di compressione poteva scrivere fino a 4 byte oltre il buffer di uscita, se l'ultimo valore compresso superava il confine del byte;
    • corretta la verifica del flusso durante la decompressione (in zxc_decompress.c): è stata aggiunta una verifica che garantisce che la dimensione del flusso di sequenze sia sufficiente per il numero dichiarato di sequenze, evitando così letture oltre il limite consentito.
    • verifica della dimensione del blocco: ora nelle funzioni zxc_cctx_init() e zxc_read_file_header() si verifica che le dimensioni dei blocchi siano nell'intervallo [ZXC_BLOCK_SIZE_MIN, ZXC_BLOCK_SIZE_MAX] e siano potenze di due;
    • compatibilità con C++: tutti i file di intestazione pubblici ora contengono costrutti protettivi extern "C" per un utilizzo senza problemi in C++;
    • memorizzazione del corpus di test per il testing di fuzzing: configurato un archivio permanente di corpus per ClusterFuzzLite CI.
  • Documentazione:
    • docs/API.md: nuova guida completa all'API e all'ABI, che descrive tutti i 21 simboli esportati, definizioni di tipi, strategie di visibilità, versioning ABI, garanzie di thread-safety e modelli di gestione degli errori;
    • aggiornati i manuali e il file README con istruzioni di installazione e informazioni sullo stato dei pacchetti (vcpkg, Conan, Homebrew);
    • Aggiornato il file docs/FORMAT.md con una descrizione della codifica della dimensione del blocco basata su esponente.
  • Aggiornati i wrapper per Python, Rust e Node.js.

Fonte: linux.org.ru

Acquista un hosting affidabile per siti con protezione DDoS, server VPS VDS 🔥 Acquista un hosting affidabile per siti con protezione DDoS, server VPS VDS | ProHoster