ZXC 0.9.0

ZXC 0.9.0 ZXC 0.9.0 ZXC 0.9.0 ZXC 0.9.0

Se ha lanzado la versión 0.9.0 de la biblioteca y la utilidad de consola multiplataforma. ZXC (github.com), que implementan un alto rendimiento multihilo compresión asimétrica sin pérdidas y optimizada para recursos de juegos, firmwares y paquetes de aplicaciones. El formato está diseñado bajo el principio de "escribir una vez, leer múltiples veces" (WORM).

A diferencia de códecs como LZ4, ZXC sacrifica la velocidad de compresión en favor de la máxima capacidad de descompresión.

Se declara que la velocidad de descompresión es más de un 40 % superior a la de LZ4 en Apple Silicon, más de un 25 % en Google Axion (ARM64) y más de un 5 % en x86_64, manteniendo en todos los casos una relación de compresión más alta.

Esta versión presenta una API de contexto reutilizable, la capacidad de ajustar el tamaño de los bloques, una guía de referencia completa para la API y ABI, así como varias correcciones relacionadas con la seguridad, incluida la eliminación de una vulnerabilidad de desbordamiento de búfer en la memoria, detectada durante el fuzzing del módulo de compresión.

Esta versión contiene cambios que rompen la ABI, por lo que SOVERSION ha aumentado a 2.

El proyecto está escrito en C y se distribuye bajo la licencia BSD 3.

Detalles
  • Cambios que provocan incompatibilidad:
    • SOVERSION 2: La versión ABI de la biblioteca ha sido aumentada. Los archivos binarios compilados para SOVERSION 1 deben ser recompilados.
    • Estructuras de opciones: las funciones zxc_compress() y zxc_decompress() ahora aceptan zxc_compress_opts_t* y zxc_decompress_opts_t* en lugar de parámetros posicionales. Para el comportamiento por defecto, pase NULL.
    • Codificación del tamaño del bloque: El encabezado del archivo ahora almacena el tamaño del bloque como una exponencial log2 [12..21] en lugar de la anterior codificación con dos escalas. El antiguo valor de 64 todavía es aceptado por compatibilidad.
  • Nuevas características:
    • Contextos de compresión y descompresión opacos, asignados en la memoria, que eliminan la sobrecarga de la asignación de memoria en cada llamada; ideales para plugins de sistemas de archivos (squashfs, dwarfs) y procesamiento por lotes:
      • zxc_create_cctx(), zxc_free_cctx() y zxc_compress_cctx() para compresión;
      • zxc_create_dctx(), zxc_free_dctx() y zxc_decompress_dctx() para descompresión;
      • los búferes internos solo se redistribuyen si el valor block_size o level cambia entre llamadas.
  • Tamaños de bloques ajustables:
    • el tamaño de bloque ahora se puede ajustar mediante el campo block_size en la estructura zxc_compress_opts_t;
    • rango permitido: de 4 KB a 2 MB (potencias de dos);
    • el valor por defecto sigue siendo 256 KB;
    • se ha añadido un nuevo parámetro a la utilidad de consola zxc —block-size (o -B) con soporte para sufijos de unidades (4K, 1M o 4KB, 1MB, etc.).
  • Descompresión directa rápida:
    • cuando el búfer de destino está suficientemente lleno, se omite la copia intermedia al búfer de trabajo durante la descompresión, lo que reduce la carga de memoria y acorta la latencia.
  • Seguridad y estabilidad:
    • Se corrigió un desbordamiento de búfer en zxc_bitpack_stream_32: el ciclo de compresión podía escribir hasta 4 bytes fuera del búfer de salida si el último valor comprimido cruzaba el límite de un byte;
    • Se corrigió la verificación del flujo durante la descompresión (en zxc_decompress.c): se agregó una comprobación que asegura que el tamaño del flujo de secuencias es suficiente para la cantidad de secuencias declaradas, evitando así la lectura fuera de un rango válido.
    • Comprobación del tamaño del bloque: ahora en las funciones zxc_cctx_init() y zxc_read_file_header() se verifica que los tamaños de los bloques están en el rango [ZXC_BLOCK_SIZE_MIN, ZXC_BLOCK_SIZE_MAX] y que son potencias de dos;
    • Compatibilidad con C++: todos los archivos de encabezado públicos ahora contienen constructos de protección extern "C" para un uso sin problemas en C++;
    • Almacenamiento de casos de prueba para pruebas de fuzzing: se configuró un almacenamiento permanente de casos para ClusterFuzzLite CI.
  • La documentación:
    • docs/API.md: nueva guía completa sobre API y ABI, que describe todos los 21 símbolos exportados, definiciones de tipos, estrategia de visibilidad, versionado de ABI, garantías de seguridad de hilo y plantillas de manejo de errores;
    • Se actualizaron los man y el archivo README con instrucciones de instalación y estado de los paquetes (vcpkg, Conan, Homebrew);
    • Se actualizó el archivo docs/FORMAT.md con la descripción de la codificación del tamaño del bloque basada en exponentes.
  • Se actualizaron los wrappers para Python, Rust y Node.js.

Fuente: linux.org.ru

Compra un hosting fiable para sitios web con protección contra DDoS, servidores VPS VDS 🔥 Compra un hosting fiable para sitios web con protección contra DDoS, servidores VPS VDS | ProHoster