Skip to content

PJA 0.6.4

Choose a tag to compare

@github-actions github-actions released this 05 Nov 00:51
· 91 commits to main since this release

Fixes from a code audit of the command, the library, the 7-Zip and zpaq-std plugins and the build. None of them lost data: PJA verifies everything before it writes it.

  • A valid repair was refused. A JPEG cut short whose filler came out longer than what was left was stored as bytes, and with --no-verify it was written as a .pja that did not extract. Now it is taken (a 70% cut of a corpus photo: 85.07% instead of 88.6%), and a repaired JPEG is always checked, even with --no-verify. .pja files written before, that one included, extract.
  • Verification stopped at 256 MiB of a file's raw part; it now goes as far as the file.
  • A thread the system refused left the threads already started running on freed memory. The bands left now run on the caller's thread, with the same stream.
  • The 7-Zip filter could write a record past its size limit that its own decoder refuses; lossless JPEGs no longer get tables they do not use; a failed filter B stops the stream.
  • libpja kept about 18 MB of models for every host thread that called it; a few sets are now kept for the next call, the rest freed. Null output pointers are refused.
  • JPEG-LS files with small components in an interleaved scan crashed the parser; a component coded twice is refused when compressing; fill bytes before a marker are taken.
  • JPEG: scans grow by doubling (more than 1024 go as bytes); MPO offsets are read in 64 bits on 32-bit systems.
  • The command: two inputs with the same output (a.jpg and a.jpeg, or one name from two folders) overwrote each other, now the later one fails; a write cut short no longer leaves a truncated file under the final name (except on FAT/exFAT); -n refuses what the real run would; long names and \ in Linux names work.
  • zpaq-std plugin: pjall's memory estimate counted one band for large lossless JPEGs; pjax counted the host's scans but not its parts'. The codecs, their streams and their ZPAQL are 0.6.0's.
  • macOS: the zpaq-std plugin is now pja.so (zpaq-std loads codecs/<name>.so); rename an earlier pja.dylib. libpja's install name is no longer an absolute build path.
  • The same bytes. The format and the streams are 0.6.3's; the only new outputs are the repairs above and JPEGs of over 1024 scans, now stored as bytes. Checked on Linux x86-64, x86 and arm64, Windows x64 and x86, and macOS arm64.

Downloads

platform the pja command the zpaq-std plugin libpja (C library, 7-Zip plugin)
Linux x86-64 pja-0.6.4-linux-x86_64.tar.gz pja-0.6.4-zpaqstd-plugin-linux-x86_64.tar.gz pja-0.6.4-lib-linux-x86_64.tar.gz
Linux x86 (32-bit) pja-0.6.4-linux-x86.tar.gz pja-0.6.4-zpaqstd-plugin-linux-x86.tar.gz pja-0.6.4-lib-linux-x86.tar.gz
Linux arm64 pja-0.6.4-linux-arm64.tar.gz pja-0.6.4-zpaqstd-plugin-linux-arm64.tar.gz pja-0.6.4-lib-linux-arm64.tar.gz
macOS arm64 pja-0.6.4-macos-arm64.tar.gz pja-0.6.4-zpaqstd-plugin-macos-arm64.tar.gz pja-0.6.4-lib-macos-arm64.tar.gz
Windows x64 (7 and later) pja-0.6.4-windows-x64.zip pja-0.6.4-zpaqstd-plugin-windows-x64.zip pja-0.6.4-lib-windows-x64.zip
Windows x86 (XP and later) pja-0.6.4-windows-x86.zip pja-0.6.4-zpaqstd-plugin-windows-x86.zip pja-0.6.4-lib-windows-x86.zip

pja-0.6.4-zpaqstd.tar.gz holds the plugin's sources as zpaq-std vendors them, with VENDOR.md. CI builds and checks every binary on its own platform (.github/workflows/release.yml); libpja is checked with its C test and, on Linux x86-64, through a real 7-Zip. SHA256SUMS has the checksums. The Linux builds need glibc 2.34 or later. The macOS ones are not signed: run xattr -d com.apple.quarantine after unpacking.