Changes for version 0.02 - 2026-07-31

  • Fix the bundled CityHash128 for inputs of 128 bytes or more, so compressed blocks of a realistic size checksum correctly. All compression paths were affected.
  • Fix RowBinary NULL framing: a Nullable value is written only when the flag says not-null.
  • Harden the decoder against malformed blocks: bound the variant slot table, cap type and JSON nesting depth, bound allocations driven by wire counts, and free partially-built columns on croak.
  • Reject out-of-range Date, Date32, DateTime64, Enum and FixedString values instead of wrapping or truncating them.
  • Set CLONE_SKIP on the encoder, streamer and bulk inserter.
  • decode_stream / select_blocks: stop re-parsing a partial block on every chunk, and stop mistaking one for a corrupt header.
  • parse_create_table accepts `show create table` as it arrives over HTTP; add a read timeout to TCP read_packet; reject '@' in HTTP hosts and accept bracketed IPv6 literals.
  • Declare Encode and POSIX; suggest Time::Moment.
  • Extend fuzz, leak, thread and hardening test coverage.

Modules

Fast XS encoder for ClickHouse Native format
Pack/unpack a useful subset of the ClickHouse native TCP protocol

Provides

in lib/ClickHouse/Encoder.pm
in lib/ClickHouse/Encoder.pm