ZXC 0.9.0

ZXC 0.9.0 ZXC 0.9.0 ZXC 0.9.0 ZXC 0.9.0

Foi lançado o versão 0.9.0 da biblioteca e da utilidade de console multiplataforma ZXC (github.com), implementando compressão multithread de alto desempenho assimétrica sem perda e otimizada para recursos de jogos, firmwares e pacotes de aplicativos. O formato foi desenvolvido com o princípio de "escrever uma vez, ler muitas vezes" (WORM).

Ao contrário de codecs como LZ4, o ZXC sacrifica a velocidade de compressão em favor da máxima largura de banda durante a descompressão.

A velocidade de descompressão é declarada em mais de 40% mais alta do que LZ4 no Apple Silicon, mais de 25% mais alta no Google Axion (ARM64) e mais de 5% mais alta no x86_64, mantendo um índice de compressão mais elevado em todos os casos.

Esta versão apresenta uma API de contexto reutilizável, a capacidade de configurar tamanhos de bloco, um guia de referência completo para API e ABI, além de várias correções de segurança, incluindo a eliminação de uma vulnerabilidade de estouro de buffer na pilha, descoberta durante o fuzzing do módulo de compressão.

Esta versão contém mudanças que quebram o ABI, portanto, a SOVERSION foi aumentada para 2.

O projeto é escrito na linguagem C e é distribuído sob a licença BSD 3.

Detalhes
  • Mudanças que levam a incompatibilidade:
    • SOVERSION 2: A versão ABI da biblioteca foi aumentada. Os arquivos binários compilados para a SOVERSION 1 precisam ser recompilados.
    • Estruturas de opções: as funções zxc_compress() e zxc_decompress() agora aceitam zxc_compress_opts_t* e zxc_decompress_opts_t* em vez de parâmetros posicionais. Para um comportamento padrão, passe NULL.
    • Codificação do tamanho do bloco: o cabeçalho do arquivo agora armazena o tamanho do bloco como uma exponencial log2 [12..21] em vez da codificação anterior com duas escalas. O valor antigo de 64 ainda é aceito para compatibilidade retroativa.
  • Novas funcionalidades:
    • Contextos de compressão e descompressão opacos, alocados na pilha, que eliminam a sobrecarga de alocação de memória em cada chamada; ideais para plugins de sistema de arquivos (squashfs, dwarfs) e processamento em lote:
      • zxc_create_cctx(), zxc_free_cctx() e zxc_compress_cctx() para compressão;
      • zxc_create_dctx(), zxc_free_dctx() e zxc_decompress_dctx() para descompressão;
      • os buffers internos só são realocados se o valor block_size ou level mudar entre chamadas.
  • Tamanhos de bloco configuráveis:
    • o tamanho do bloco agora pode ser configurado com o campo block_size na estrutura zxc_compress_opts_t;
    • intervalo permitido: de 4 KB a 2 MB (potência de dois);
    • por padrão, o valor permanece em 256 KB;
    • um novo parâmetro foi adicionado à utilidade de console zxc —block-size (ou -B) com suporte a sufixos de unidade (4K, 1M ou 4KB, 1MB, etc.).
  • Descompressão direta rápida:
    • quando o buffer de destino está suficientemente preenchido, a descompressão ignora a cópia intermediária para o buffer de trabalho, reduzindo a carga na memória e diminuindo a latência.
  • Segurança e estabilidade:
    • corrigido o estouro do buffer no zxc_bitpack_stream_32: o ciclo de empacotamento poderia gravar até 4 bytes além do buffer de saída, se o último valor empacotado cruzasse o limite do byte;
    • corrigida a verificação do fluxo durante a descompactação (em zxc_decompress.c): foi adicionada uma verificação que garante que o tamanho do fluxo de sequências é suficiente para a quantidade declarada de sequências, o que impede a leitura além do intervalo permitido.
    • verificação do tamanho do bloco: agora nas funções zxc_cctx_init() e zxc_read_file_header() é feita uma verificação para que os tamanhos dos blocos estejam dentro do intervalo [ZXC_BLOCK_SIZE_MIN, ZXC_BLOCK_SIZE_MAX] e sejam potências de dois;
    • compatibilidade com C ++: todos os arquivos de cabeçalho públicos agora contêm estruturas de proteção extern "C" para uso sem problemas em C++;
    • armazenamento de casos de teste para testes de fuzzing: configurados para armazenamento persistente de casos para ClusterFuzzLite CI.
  • Documentação:
    • docs/API.md: um novo guia abrangente sobre API e ABI, que descreve todos os 21 símbolos exportados, definições de tipos, estratégia de visibilidade, versionamento de ABI, garantias de segurança de thread e padrões de tratamento de erros;
    • atualizados man e o arquivo README com instruções de instalação e informações sobre o status dos pacotes (vcpkg, Conan, Homebrew);
    • arquivo atualizado docs/FORMAT.md com a descrição da codificação do tamanho do bloco com base na exponência.
  • Atualizados wrappers para Python, Rust e Node.js.

Fonte: linux.org.ru

Compre hospedagem confiável para sites com proteção contra DDoS, servidores VPS VDS 🔥 Compre hospedagem confiável para sites com proteção contra DDoS, servidores VPS VDS | ProHoster