Repository navigation
PJA 0.6.4
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-verifyit was written as a.pjathat 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..pjafiles 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.jpganda.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);-nrefuses 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 loadscodecs/<name>.so); rename an earlierpja.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.