- Accept several files, or a list read from stdin, in create and extract
- Add a flat option to extract
- Add short flags -e, -j, -q and -x for the locale, flat, property and print options
- Take the archive as the first argument in every subcommand, including create and read
- Keep folders when extracting named files
- Rename the create version option to format-version
- Reject an unknown locale in extract and read instead of using the default locale
- Show the encryption keys of encrypted files listed without their names
- Accept Windows line endings in paths read from stdin
- Stop add and create from storing an archive inside itself
- Leave no archive behind when create cannot add every file
- Remove create -o, extract -f and -k, and the -p flag from info, list and verify
- Thanks to @sjoblomj for the contributions in this release
- Thanks to @MikaMika for reporting the inconsistent subcommand arguments
- Stop cleanly on Ctrl-C, leaving no partial archive behind
- Ship one static musl Linux binary per architecture, with the release assets renamed by OS and architecture
- Publish install scripts and a signed checksums file with each release
- Run the Docker image in /data so mounted paths need no prefix
- Print progress and warnings on stderr, leaving stdout for results alone
- Mark an overwritten file as changed rather than added when adding
- Fail with a non-zero exit code on an unknown subcommand, a missing argument or an internal error
- Fail with a non-zero exit code when closing, signing, listing or printing a signature fails
- Complete every locale, game profile and archive path in the zsh, fish and PowerShell scripts
- Remove the install scripts from the repository; each release now carries its own
- Add rename subcommand to rename a file inside an archive
- Compare timestamps and checksums when updating files, not size alone
- Accept the update flag for single files as well as directories
- Reject the update and overwrite flags on add when both are given
- Report filesystem errors instead of aborting when a path cannot be resolved
- Add to and create archives on volumes that cannot report real paths
- Block path traversal in extract before anything is written to disk
- Update StormLib for a variety of fixes
- Add hash-library as a submodule dependency
- Build with StormLib’s bundled compression libraries instead of system packages
- Require CMake 3.25 or later
- Thanks to @sjoblomj for the contributions in this release
verify incorrectly reporting success for a tampered archive
verify failure messages now clarify whether a signature is missing or invalid
add overwrite flag not always working as expected
- Archive size incorrectly reported for large archives
- File sizes shown as negative for large files
- Simplified how strong archive signatures are read internally
- Command completion for common shells (bash, zsh, fish and powershell)
- Memory leak in read subcommand
- Inconsistencies in documentation
- Code style to conform to Google CPP style with slight variations
- StormLib dependency for a variety of fixes
- Thanks to @sjoblomj for the contributions in this release
- Compact subcommand to compress MPQ archive after creation/editing
- Support passing multiple files to the
add and remove subcommands
- Support reading file paths from stdin in the
add and remove subcommands
- Support adding entire directories with the
add subcommand
- Add an update flag to the
add subcommand to skip files whose archived size matches the on-disk size
extract command now reports an error when the output directory cannot be created
- Path traversal guard in
extract uses fully resolved paths, closing a potential bypass
- Crash when reading strong signatures from malformed or truncated archives
- Docker glibc image updated to ubuntu:24.04
- Adding files is now ordered and operating system agnostic
add subcommand now returns non-zero exit codes on failure
- Error messages now include StormLib error codes
- Duplicate error messages removed
- Makefile build targets corrected in
CONTRIBUTING.md
--filename-in-archive and --directory-in-archive replaced by a unified --path flag
- The path flag on add now acts as an archive path prefix when a directory is given
- Thanks to @sjoblomj for the contributions in this release
- Potential path traversal attack in extract subcommand
- Empty MPQ archive name when directory supplied with trailing slash
- Bug where MPQ internal files were added with create command
- Signature being added automatically when not requested
- Potential DWORD overflow in
AddFiles
- The
create subcommand now supports a single file
- The
add and create subcommands have additional arguments for specifiying the file location in the MPQ archive (name-in-archive and dir-in-archive)
- The
add subcommand can now overwrite existing files if requested (overwrite)
- Thanks to @sjoblomj for adding more features and fixes in this release
- Game profile support for
create and add subcommands via -g/--game option
- Game profiles for Diablo, StarCraft, Warcraft, WoW, and more
- Game setting override options for
create subcommand
- Compression override options for
add subcommand
- Support for unfamiliar/unknown locales via raw hex LCID
- Additional built-in locales:
ptBR, esMX, ptPT
- Subcommands now properly verify locale before operating on files
- Error messages now include locale context in
remove, extract, and read
- MPQ archives are now properly closed across all subcommands
- Non-zero exit codes returned on failure in
extract and remove
list subcommand now shows long output when properties are requested
- Improved locale printing and display throughout
- A big thank you to @sjoblomj for adding so many features in this release
- Proper support for locales in MPQ files
- Fixed bug where MPQ signature only printed on success
- Long (detailed) list format to output ISO 8601 timestamps
- Message prefix format consistency
- Filename added to program output
- Added simple wrapper around verify command
- Show help menu when no arguments provided
- Support for
add subcommand to have path inside MPQ archive
- Bug in
add subcommand when exceeding max file count
- Bug in
create subcommand resulting in incorrect max file count
- Bug in Dockerfiles resulting in missing commit hash from version
- Linux binaries for amd64 and arm64
- Linux binaries built with musl and glibc
- Install script for Linux to provided better binary download options
- Linux binary release naming convention
- Added print raw bytes for
read and verify subcommands
- Tests for
read and verify subcommands
- Ability to print hex or plaintext in
read and verify subcommands
- Removed messages when printing signature value
- Added
add/remove subcommands working
- Added tests for
add/remove subcommands
- Added
max-files property to info subcommand
- Change for default maximum file count when creating MPQ archives
- Added detailed (long) listing
- Updated create subcommand to always include attributes
- Updated Info function to support archive/file property fetching
- Added tests for
extract subcommand
- Added dependabot configuration for Python and Docker
- Fixed deprecated Windows Action running to Server 2022
- Updated readme and help menu to match application functionality
- Added the
read subcommand
- Added tests for
read subcommand
- Added new helper functions to print ASCII or hexidecimal output
- Fixed line endings in Windows pytest cases
- Added the
verify subcommand
- Included argument to print digital signature
- Added ability to sign archive when creating MPQ
- Added tests for
verify subcommand
- Refactored
create subcommand tests
- Refactored
info subcommand
- Added test for
info subcommand
- Updated tests to be multi-platform (Windows)
- Removed exe patch split functionality
- Added Dockerfile
- Added Docker build and release workflows
- Added
add and remove subcommand placeholders
- Added
about subcommand
- Added Python testing environment
- Added tests for
list subcommand
- Added test workflow
- Added Windows binary build to releases
- External listfile support for
list and extract by @sjoblomj
- Added functions for add and remove files
- Fixed path extraction on Linux to create nested folder structure
- Fixed path extraction on Linux to create nested folder structure
- Added
create subcommand
- Added download information to readme
- Improved Linux binary compatibility
- Improved Linux binary compatibility
- Added the
extract, verify and list subcommands
- Added
release.yml workflow for Linux binary