Skip to content

v1.6.0

Choose a tag to compare

@Snesnopic Snesnopic released this 08 Jun 21:45

Major release featuring six new processors, a massive expansion of supported formats, and stability improvements.

What's new

New processors

  • PE (Portable Executable): Added support for .exe, .dll, .sys, .scr and more. The processor exposes embedded resources, like icon files.
  • VCF (vCard): Added support for contact files. The processor exposes embedded Base64 profile pictures.
  • JPEG 2000: Added support for .jp2, .j2k, and .j2c using the OpenJPEG library.
  • JSON: Implemented JSON minification using yyjson.
  • MNG / JNG: Added support for MNG animated images and JNG files.
  • PCX: Added native RLE recompression support for legacy .pcx, .dcx, and .pcc formats.

Format aliases

  • Archives: Added 36+ extensions including .ipa, .apk, .vsix, .pk3, .appx). These were already supported before, they've just been added to the list.
  • CFBF: It now handles .msi, .vsd, .mpp, .thumbs.db, and many more. Also removed an erroneous write lock that prevented optimizations.
  • OOXML: Extended support to macro-enabled files and templates (.docm, .xlsm, .pptm, etc.). Fixed a bug where manual recompression caused corrupted files.
  • PNG: Added formal support for APNG and Android 9-patch (npTc) chunks preservation.
  • XML: Added support for .xsl, .xslt, .xhtml, .fb2, and .kml. If an XML file doesn't contain extractable embedded files, it is now automatically minified instead of returning an error.
  • MP4 & GZip: Added Apple/3GPP legacy extensions (.mov, .qt, .3gp) and archive extensions (.tgz, .deb, .ipk).

General improvements

  • All temp files are now wrapped in a RAII container, so if a processor crashes, throws an exception, or the pipeline breaks, temporary .pipe.*.tmp files are deleted.
  • Wrapped prepare_extraction calls in a global try/catch(...). A corrupted container or an unhandled exception inside a third-party library will no longer crash the entire Chisel process.
  • The TGA processor now uses std::mutex to protect its global variables.
  • The PDF processor was refactored to be stateless, this was an old limitation mistakenly left in.
  • File scanner regexes are now pre-compiled, and inaccessible directories are safely skipped without logging false errors.
  • Added bounds checks to the BMP processor to prevent overflows on corrupted payloads.
  • Switched to longjmp for safe exits on error, avoiding the erroneous jpeg_finish_decompress calls in JPEG processor.

Package managers

  • Chisel is now available on the Windows package manager (winget install Snesnopic.Chisel).
  • Moved the Homebrew tap to snesnopic/tools repository.

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 ./chsl

To verify that the quarantine flag is gone:

xattr ./chsl

If 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.