ZXC 0.9.0

ZXC 0.9.0 ZXC 0.9.0 ZXC 0.9.0 ZXC 0.9.0

Wydano wersję 0.9.0 biblioteki i wieloplatformowego narzędzia konsolowego. ZXC (github.com), realizujących wysokowydajne przetwarzanie wielowątkowe asymetryczne kompresowanie bez strat i zoptymalizowane dla zasobów gier, oprogramowania układowego i pakietów aplikacji. Format zaprojektowany na zasadzie 'raz zapisać, wielokrotnie czytać' (WORM).

W przeciwieństwie do kodeków takich jak LZ4, ZXC poświęca prędkość kompresji na rzecz maksymalnej przepustowości przy dekompresji.

Deklarowana prędkość rozpakowywania jest o 40%+ wyższa niż LZ4 na Apple Silicon, o 25%+ wyższa na Google Axion (ARM64) i o 5%+ wyższa na x86_64, przy czym w każdym przypadku zapewniony jest wyższy współczynnik kompresji.

W tej wersji wprowadzono API kontekstu wielokrotnego użytku, możliwość dostosowywania rozmiaru bloków, pełną dokumentację API i ABI oraz kilka poprawek związanych z bezpieczeństwem, w tym eliminację luki w przepełnieniu bufora na stercie, wykrytej podczas fuzzingu modułu kompresji.

Ta wersja zawiera zmiany, które naruszają ABI, dlatego SOVERSION zwiększono do 2.

Projekt napisany w języku C i dystrybuowany na licencji BSD 3.

Szczegóły
  • Zmiany prowadzące do niezgodności.:
    • SOVERSION 2: Wersja ABI biblioteki została zwiększona. Pliki binarne skompilowane dla SOVERSION 1 muszą zostać ponownie skompilowane.
    • Struktury opcji: funkcje zxc_compress() i zxc_decompress() teraz przyjmują zxc_compress_opts_t* i zxc_decompress_opts_t* zamiast pozycyjnych parametrów. Aby uzyskać domyślne zachowanie, przekaż NULL.
    • Kodowanie rozmiaru bloku: Nagłówek pliku teraz przechowuje rozmiar bloku w postaci wykładnika log2 [12..21] zamiast wcześniejszego kodowania z dwiema skalami. Starsza wartość 64 nadal jest akceptowana dla zapewnienia kompatybilności wstecznej.
  • Nowe możliwości:
    • Nieprzezroczyste konteksty kompresji i dekompresji, przydzielane w stercie, które eliminują narzuty przydzielania pamięci przy każdym wywołaniu; idealne dla systemów plików z pluginami (squashfs, dwarfs) oraz przetwarzania wsadowego:
      • zxc_create_cctx(), zxc_free_cctx() i zxc_compress_cctx() do kompresji;
      • zxc_create_dctx(), zxc_free_dctx() i zxc_decompress_dctx() do dekompresji;
      • Wewnętrzne bufory są ponownie przydzielane tylko wtedy, gdy pomiędzy wywołaniami zmienia się wartość block_size lub level.
  • Dostosowane rozmiary bloków:
    • rozmiar bloku można teraz dostosować za pomocą pola block_size w strukturze zxc_compress_opts_t;
    • dozwolony zakres: od 4 KB do 2 MB (potęga dwa);
    • domyślna wartość pozostaje 256 KB;
    • do konsolowego narzędzia zxc dodano nowy parametr —block-size (lub -B) z obsługą jednostek miary (4K, 1M lub 4KB, 1MB itd.).
  • Szybka dekompresja bezpośrednia:
    • gdy bufor docelowy jest wystarczająco wypełniony, podczas rozpakowywania pomija się pośrednie kopiowanie do bufora roboczego, co pozwala zmniejszyć obciążenie pamięci i zredukować opóźnienie.
  • Bezpieczeństwo i stabilność:
    • naprawiono przepełnienie bufora w zxc_bitpack_stream_32: cykl pakowania mógł zapisywać do 4 bajtów poza bufor wyjściowy, jeśli ostatnia zapakowana wartość przekraczała granicę bajta;
    • naprawiono sprawdzanie strumienia podczas dekompresji (w zxc_decompress.c): dodano sprawdzenie, które gwarantuje, że rozmiar strumienia sekwencji jest wystarczający dla zadeklarowanej liczby sekwencji, co zapobiega odczytowi poza dozwolonym zakresem.
    • sprawdzanie rozmiaru bloku: teraz w funkcjach zxc_cctx_init() i zxc_read_file_header() wykonywane jest sprawdzenie, czy rozmiary bloków mieszczą się w przedziale [ZXC_BLOCK_SIZE_MIN, ZXC_BLOCK_SIZE_MAX] i są potęgami dwójki;
    • kompatybilność z C++: wszystkie publiczne pliki nagłówkowe teraz zawierają konstrukcje ochronne extern "C" dla bezproblemowego użycia w C++;
    • przechowywanie korpusów testowych do testów fuzzingowych: skonfigurowano trwałe przechowywanie korpusów dla ClusterFuzzLite CI.
  • Dokumentacja:
    • docs/API.md: nowy kompleksowy przewodnik po API i ABI, który opisuje wszystkie 21 eksportowanych symboli, definicje typów, strategię widoczności, wersjonowanie ABI, gwarancje bezpieczeństwa wątków i szablony obsługi błędów;
    • zaktualizowano man i plik README z instrukcjami instalacji oraz informacjami o statusie pakietów (vcpkg, Conan, Homebrew);
    • zaktualizowano plik docs/FORMAT.md z opisem kodowania rozmiaru bloku na podstawie eksponensji.
  • Zaktualizowano opakowania dla Pythona, Rust i Node.js.

Źródło: linux.org.ru

Kup solidny hosting stron z ochroną przed DDoS, serwery VPS VDS 🔥 Kup solidny hosting stron z ochroną przed DDoS, serwery VPS VDS | ProHoster