v1.10.0
Major release with bug fixes and processor replacements for FLAC and GIF
What's new
GIF
- New processor:
OptigifProcessorreplaces the oldgifsicleandflexiGIFprocessors with a single pass (structural rebuild and LZW restart search share one in-memory model instead of handing the file back and forth). On real world test files it beats the old pipeline on both size and time (roughly +0.4 percentage points of compression at about 4.5x less time). Also a lot easier to maintain, as gifsicle wasn't a particularly easy to use codebase. - The
--max-tokensflag is gone, as it was used for flexigif, and won't be missed.
FLAC
- New processor:
FlacoutProcessorreplaces the old encoder, that was based on libFLAC. It searches a much larger part of the LPC, apodization and block size space than libFLAC's own encoder. Thanks to @W-Floyd's PR's (#1, #2, #4), it is a lot more feasible to use, as it was way too slow before.
CFBF (Windows only)
- Fixed sub-storage class IDs being silently dropped during recompression
- Fixed creation and modification timestamps never being preserved
- Implemented integrity verification
- Fixed corruption when optimizing files on network shares
- Removed
.chmand.mdbfrom supported extensions
WavPack
- Fixed the channel mask being dropped during recompression, causing tools like ffmpeg to refuse multichannel and even plain stereo output as "unassigned speakers". Audio itself was never affected, this was metadata related
Processor executor
- If a file has two or more processors registered, and one of them fails, now the best result from the other processors will be used instead of just returning the original file
Dependencies
- Updated
mp3packercppto v1.2.1: performance improvements (again, thanks @W-Floyd for #1), fixed output corruption on MPEG2.5 files, fixed silence being truncated away on tracks that are quiet throughout, now also optimizes MPEG2/MPEG2.5 audio - Updated
mseedoutto v1.1.0: fixed an out of memory crash on long seismic traces - Updated
OptiVorbisto v0.3.2: improves compression removing unused entries in the codebooks - Updated
libarchiveto v3.8.9: fixes CVE-2025-5915 (heap buffer overflow reading RAR archives) plus many of out-of-bounds read, use-after-free and integer-overflow fixes across the tar, zip, iso9660, cpio, warc, cab, xar and 7z readers - Updated
taglibto v2.3.1: fixes a crash on Matroska files with an invalid or missing seek head, plus a bunch of EBML and MP4 validation fixes - Updated
libmatroskato release-1.7.2 andlibebmlto release-1.4.7: better EBML parsing to reject infinite sizes outside Segment/Cluster (per RFC 9559) and fixes a memory leak when an upper element is found inside the last element - Updated
libogg: fixes a potential integer overflow inogg_stream_iovecin - Updated
woff2: fixes non-monotonic glyph contour points plus a related overflow check
Removed
vbrfix(the MP3 VBR header fixer) has been dropped. It was previously needed for mp3packer's original implementation in chisel, but since upgrading to mp3packercpp, it is no longer needed
macOS: removing the Gatekeeper quarantine
When downloading binaries from the internet, macOS automatically marks them as “quarantined”.
If you try to run chsl and macOS shows a warning like:
“chsl cannot be opened because it is from an unidentified developer”
…you need to remove the quarantine attribute manually.
How to remove the quarantine flag
Open Terminal in the folder where you downloaded chsl and run:
xattr -d com.apple.quarantine ./chslTo verify that the quarantine flag is gone:
xattr ./chslIf com.apple.quarantine no longer appears, you're good to go.
Now you can run:
./chsl ...Note
This issue does not occur if you compile chsl yourself.