UnZip, version 6.1c, ?? ??? 2016 These changes occurred in beta versions 6.10a through 6.1c. Features added (or removed): 6.10a00 (05 Jul 2010): - Copy over UnZip 6.00 and rename as UnZip 6.10a00. [EG] 6.10a01 (05 Jul 2010): - No feature changes. 6.10a02 (10 Jul 2010): - Add new command parser code from new-cmdparser/unz6-newcmdparser-diffs.txt, which is a modified version of the new Zip parser. Some modifications to account for changes in UnZip since code was written. UnZip now supports use of get_option() to parse the command line, adding support for a command table and long options. Command parsing now mostly similar to that used in Zip, but most of UnZip syntax preserved. One big difference is inverting an option (making negative) is now done by a trailing "-" instead of a leading one. See the long help and the manual for the current syntax of these and all commands. (unzip.c, unzpriv.h, zipinfo.c, vms/cmdline.c) [EG] - Changed zipgrep to cope with the new command parser. Added environment variable ZIPGREP_UNZIP to let the user specify a particular UnZip program to use. (unix/zipgrep) [SMS] - Add new option --license to show the license and note added to short help displayed when no command arguments that this new option exists. Allows distribution of UnZip under the current Info-ZIP license without additional documentation. Calls show_license(). (unzip.c) [EG] - Add preliminary support for AppleDouble storage of resource information on Mac platforms. (extract.c, fileio.c, globals.h, unzip.c, unzip.h, unzpriv.h, unix/unix.c) [SMS] - Add VMS symlink works check. (extract.c) [SMS] - Add new option --options to show all available options. (unzip.c) [EG] - Add strerror() if port does not have one. Add check for mbstr.h. (unzpriv.h, unix/configure, unix/unix.c) [SMS] - Add uname calls to get system identification. (unix/configure, unix/unix.c) [SMS] - Add control of UID/GID and SGID using X_flag and K_flag. (unix/unix.c, vms/vms.c) [SMS] - Add verbose report. (vms/cmdline.c, vms/unz_cli.cld) [SMS] - Update VMS notes. (vms/notes.txt) [SMS] - VMS return code updates and allow restoring old status codes. (vms/vms.c) [SMS] 6.10a03 (30 Jul 2010): - fnfilter() now converts to a wide character string and does the isprint() check on that, avoiding the issue of doing the check on multi-byte characters. (extract.c, win32/win32.c, unzpriv.h, process.c) [EG] - Update TODO list. (ToDo) [EG] 6.10a04 (05 Aug 2010): - Updated INSTALL with latest information. [SMS] - Remove 8-bit ASCII characters from ToDo. Add items. [SMS] - Add ZipInfo "C" option to command table. (unzip.c) [SMS] - Add new option --commandline to show the processed command line and exit. Add new function show_commandline(). Update extended help. (unzip.c, fileio.c, unzip.h, zipinfo.c) [EG] 6.10a05 (08 Aug 2010): - No feature changes. 6.10a06 (09 Aug 2010): - Update version information in description file. (file_id.diz) [EG] 6.10a07 (10 Aug 2010): - Add announcement file. (unzip610a.ann) [EG] - Replace /[NO]CASE_INSENSITIVE with /CASE_MATCH. (vms/unzip_cli.help, vms/unz_cli.cld) [SMS] 6.10a (23 Aug 2010): - Add note to README. Update announcement. (README, unzip610a.ann) [EG] 6.10b01 (12 Sep 2010): - Restore full Windows Unicode support based on diff in win32-experimental directory. Mainly involved adding wide character OS calls to Windows port code. WIN32_WIDE must be defined for the new code to be used, but this should be the default on Windows platforms from NT on. Currently Windows 9x Unicode is partially supported, but this support may be pulled to clean up the code. Some of the new functions include check_for_newerw() has_win32_wide(), wchar_to_wide_string(), wchar_to_local_string(), iswildw(), zstat_win32w(), getNTfiletimeW(), defer_dir_attribsw(), set_direc_attribsw(), FStampIsLocTimeW(), mapnamew(), checkdirw(), NTQueryVolInfoW(), maskDOSdevicew(), extract_or_test_entrylistw(), and map2fatw(). (extract.c, fileio.c, process.c, match.c, globals.h, unzip.c, unzpriv.h, win32/nt.c, win32/nt.h, win32/w32cfg.h, win32/win32.c, win32/vc6/funzip.dsp, win32/vc6/unzip.dsp, win32/vc6/unzipbz2.dsp, win32/vc6/unzipsfx.dsp, windll/vc6/dll/unz32dll.dsp) [EG] 6.10b02 (16 Sep 2010): - Implement -I (--iso-char-set) and -O (--oem-char-set) options to allow user to set a specific ISO or OEM character set that UnZip should translate from to create the internal file name strings. Based on the unzip60-alt-iconv-utf8.patch suggested in a forum thread. This patch is rather simple, just providing the new options to manually set the input character set (generally OEM if archive from Windows and ISO otherwise). These options are currently only available on Unix. This is separate from the Unicode implementation that allows direct conversion between character sets and bypasses these new options if an entry has Unicode. These options are only for converting names from older archives without stored UTF-8 to names that are readable on a Unix platform. This implementation includes a short table to automatically guess the code page for a few common locales. More locales can be added later, and a more complete solution might be implemented later based on something like the libnatspec or librcc libraries. However, the goal is for everyone to move to zippers that support UTF-8 so these options are no longer needed. Enabled by setting the USE_ICONV_MAPPING macro. Uses the iconv library which must be available. (unzip.c, zipinfo.c, unix/unix.c, unix/unxcfg.h) [EG] 6.10b03 (06 Nov 2010): - No feature changes. 6.10b04 (25 Nov 2010): - Resurrected Acorn port by rewriting/updating the makefiles, replacing srcrename utility with 32bit compatible BASIC equivalent, replacing APCS-R swiven.s file with more portable C version, and updating contents & readme files with compilation instructions for the latest compilers. Fixed a few compiler warnings/errors and swapped the os_error struct for the standard _kernel_os_error. (acorn/makefile, acorn/GMakefile, acorn/srcrename, acorn/acorn.c, acorn/riscos.c, acorn/riscos.h, acorn/swiven.c, acorn/swiven.h, acorn/Contents, acorn/ReadMe, acorn/RunMe1st updated. acorn/swiven.s deleted.) [Jeffrey Lee] - Acorn port: Increased max file name/path length to 1024. (acorn/riscos.h) [Jeffrey Lee] - Acorn port: Increased max file name/path length to 1024. (acorn/riscos.h) [Jeffrey Lee] - Acorn port: Added SET_DIR_ATTRIB support, so that directories are created with the right timestamps/attributes. (acorn/riscos.h, acorn/acorn.c) [Jeffrey Lee] - Minor edits to Contents. (acorn/Contents) [EG] - Update VB6 example project to add more comments, change some form object sizes, and update GUI handling of listing and extracting. Update readme. (windll/vb/vbreadme.txt, windll/vb/vbunzip.bas, windll/vb/vbunzip.frm, windll/vb/vbunzip.vbp) [EG] - Add announcement file for UnZip 6.10b. (unzip610b.ann) [EG] 6.10b05 (29 Nov 2010): - No feature changes. 6.10b06 (03 Dec 2010): - Updated INSTALL and README. (INSTALL, README) [EG] 6.10b07 (05 Dec 2010): - No feature changes. 6.10b (10 Dec 2010): - No feature changes. 6.10c01 (15 May 2011): - Clarify VMS usage line. (unzip.c) [SMS] - Add compiler test. (unix/configure) [SMS] - Make -s (spaces to underscores) option generic (unzip.c) [Stan Sieler] - Add optional support for AES encryption compatible with WinZip version (compression method 99). Use Gladman AES implementation. Note that when the optional AES_WG support is not enabled, this still changes the old message: skipping: <name> unsupported compression method 99 to: skipping: <name> AES_WG encr method not supported when trying to extract an AES_WG-encrypted file. (crypt.c, crypt.h, extract.c, fileio.c, globals.h, list.c, process.c, unzip.c, unzpriv.h, zipinfo.c) [SMS] 6.10c02 (28 May 2011): - Add ef_scan_for_aes() and ef_strip_aes() for processing AES extra fields. (crypt.c) [SMS] - Update zipcloak() and zipbare() to support AES encryption and decryption. (Technically a Zip update, but to common code). (crypt.c) [SMS] - Add WIN32 entropy_fun(). Add VCC 6 project for compiling in AES encryption. (crypt.c) [EG] - Add AES support to ZipInfo. Add recognition of flag bit 0x0040. (Not sure if this is correct.) (zipinfo.c) [SMS] - Add support for named parameters to configure. Add support for AES encryption. (unix/configure, unix/makefile) [SMS] - Add AES encryption. (vms/build_unzip.com, vms/descrip.mms, vms/descrip_deps.mms, vms/descrip_mkdeps.mms, vms/descrip_src.mms) [SMS] - Add initial VCC6 project for compiling AES on Win32. (win32/vc6/unzip.dsp) [EG] - Update UnZip to more current Zip version of crypt.c, making modifications as needed. (crypt.c) [SMS] - Update testp() and testkey() to support AES. (crypt.c) [SMS] 6.10c03 (24 Jul 2011): - Add AES_WG version to CRYPT_AES_WG line in -v. (unzip.c, unzpriv.h) [SMS] - Add P6 (search vector) and P7 (macro vector) parameters. (vms/collect_deps.com) [SMS] 6.10c04 (05 Aug 2011): - First attempt at support for LZMA compression (method 14). (extract.c, fileio.c, unzip.c, unzpriv.h, lzma/* (from LZMA SDK), unix/configure, unix/Makefile, vms/descrip.mms, vms/descrip_deps.mms, vms/descrip_src.mms) [SMS] - Create start of zos port. (zos/zcc, zos/zld) [AD] - Modify handling of non-ASCI file names (-I/-O options) to automatically guess OEM code page when not already set. Only some common mappings have been added currently. Only used if USE_ICONV_MAPPING is defined. (unix/unix.c) [EG, based on patch by Dmitry Butskoy on Red Hat Bugzilla - Bug 225576] 6.10c05 (13 Aug 2011): - Add LZMA files needed by UnZip from LZMA SDK version 9.20. (lzma/7zfile.c, lzma/7zfile.h, lzma/7zversion.h, lzma/alloc.c, lzma/alloc.h, lzma/lzfind.c, lzma/lzhash.h, lzma/lzmadec.c, lzma/lzmadec.h, lzma/README_LZMA.txt, lzma/types.h, lzma/orig/lzfind.h) [SMS] - Split cmsmvs port into two ports zos and zvm. (cmsmvs/* (removed), zos/ccunzip.exec, zos/mvs.mki, zos/readme.mvs, zos/unzmvsc.job, zos/vmmvs.c, zos/vmmvs.h, zvm/install.cms, zvm/mc.exec, zvm/readme.cms, zvm/unzip.exec, zvm/unzip.makefile, zvm/unzvmc.exec, zvm/vmstat.h, zvm/whatsnew.cms, zvm/zipinfo.exec) [AD] - Drop VMS CASE_INSENSITIVE option as conflicts with CASE_MATCH. Add NAMES option that includes NAMES.LOWERCASE, NAMES.ODS2 (convert names to ODS2), and NAMES.SPACES (convert spaces to underscores). Add CASE_MATCH = BLIND (ignore case) or SENSITIVE (don't ignore differences in case). (vms/cmdline.c, vms/unz_cli.cld, vms/unzip_cli.help) [SMS] - Add note about self-extracting archives. (vms/install.vms) [SMS] - Update VMS help for self-extracting archives. (vms/unzipsfx.hlp) [SMS] 6.10c06 (24 Aug 2011): - Create new Win32 projects for AES_WG and LZMA. Additional cleanup of the Win32 projects is expected before release. (win32/vc6/unzip.dsp, win32/vc6/unzip.dsw, win32/vc6/unzipaes.dsp) [EG] 6.10c07 (12 Sep 2011): - Rename vms/INSTALL.VMS to vms/INSTALL_VMS.txt. Move much of the VMS material from INSTALL to vms/INSTALL_VMS.txt. Minor update to Mac OS X to note adding of AppleDouble Finder info and resource fork storage. (vms/INSTALL_VMS.txt, INSTALL) [SMS] - Change default to -D everywhere, not only on VMS. Update extended help. Update man page. (globals.c, unzip.c, man/unzip.1) [SMS] - Restructure unix build: Restructure, document, reorganize; recognize IBM compilers (z/OS, z/VM, AIX, Linux. iSeries); recognize z/OS system (uname -I variant); add $PROD/flags_bz; support build with system zlib, zlib in tree; support man and doc generation. (unix/configure, unix/Makefile) [AD] - Correct z/OS build script options parsing. (zos/zcc, zos/zld) [AD] - Add z/OS wrapper script for C preprocessor tests. (zos/zccp) [AD] - For unzip -v, emit IBM compiler OS-specific version. (unix/unix.c) [AD] - Customize unix build for z/OS UNIX (HAVE_SYS_TIME_H, sys/time.h, sys/timeb.h, utime.h, et al). (unix/unxcfg.h) [AD] - Add PORT unix/configure macro, allows reuse by z/OS MVS build (under z/OS UNIX) (unix/configure) [AD] - Following changes made to unix/configure, mainly to support z/OS port. (unix/configure) [AD] 1. A new file $PROD/flags_bz is generated containing just the bzip2 compilation-related flags. 2. UNAME-related flags now in more legible order. 3. For z/OS, use "uname -I" to generate current z/OS information. 4. Now generates installation flags (BINDIR, BINPERMS). 5. Now generates man page flags (MANEXT, MANDIR, MANPERMS); unix/Makefile supports generic_man and generic_doc. 6. Now generates man page nroff option, currently "-Tascii" or "". 7. Flags renamed for consistency between zip and unzip: - CFLAGS -> CF - CFLAGS_BZ -> CF_BZ - LFLAGS1 -> LF1 - LFLAGS2 -> LF2 8. Flags generated are a superset of zip and unzip and include additional header checks. 9. OSDEP_xxxx flags contain OS-dependent values: - OSDEP_C C source files - OSDEP_H C header files - OSDEP_S Assembler source files - OSDEP_OC Object files (C) - OSDEP_OS Object files (assembler) These allows multiple OS-dependent C or assembler source files. 10. Use consistent configuration, naming and recipes for assembler files. 11. Add $PROD/flags values for program extensions: - PMGEXT Executables - DLLEXT DLLs (Shared objects) 12. Add $PROD/flags values for RANLIB, RM and LN. 13. Add $PROD/flags values for AR, required by IBM XLC for AIX 64-bit compiles. 14. Object archive dependencies. Non-blank if library is required: LIB_AES_WG, LIB_LZMA, LIB_BZ, LIB_Z. 15. ZLIB and BZIP2 support now consistent: - Supports build within tree via bzip2/Makefile or zlib/Makefile (if present) - Supports build with OS-owned libbz2.a (IZ_BZIP2=bzip2, ./bzip2 is empty) - Supports build with OS-owned libz.a (IZ_ZLIB=zlib, ./zlib is empty) - Returns MK_BZ to allow configure to return system-specific BZIP2 makefile name 16. Now supports AF for assembler flags. 17. Support compiler listing options (+ CC on z/OS) for LIST=1. 18. Cleanup targets now same on zip and unzip (clean, clean_bzip2, clean_exe) 19. All make targets are now explicit for portability; SysV make pattern matching is not as powerful as gmane or z/OS make (MKS). 20. .SUFFIX reset to prevent builds from using default .c -> .o rules. 21. On z/OS, use CC=c89 (xlc ends with sigkill for failing compiles). 22. On AIX (with IBM XL C) use CC=c89. 23. Use unzip nl_langinfo() test instead of following zip test (which fails because codeset is not an int). 24. Add test for sys/param.h (for -DNO_PARAM_H). 25. Add test for sys/time.h (separate from entry timing). 26. Add tests for sys/timeb.h and utime.h. 27. Set z/OS linker flag.s 28. Add PORT unix/configure parm, allows reuse by z/OS MVS build (under z/OS UNIX) [AD] - Minor updates to -D option help and option descriptions. Add warning regarding change in option negation (trailing "-" instead of leading). Add note that split support should be coming by release of UnZip 6.10. Add mention of automatic code page selection in some cases, but can be overridden by use of -I and -O. (unzip.c) [EG] - Additional updates to UnZip man page. (man/unzip.1) [EG] 6.10c08 (22 Nov 2011): - Add initial implementation of a user-triggered progress message. Enabled by default, disabled by defining the C macro NO_USER_PROGRESS. Adds a SIGUSR1 signal handler (non-VMS) or a control-T AST (VMS), user_progress(). On non-VMS systems, add option -si to display the UnZip process ID, for convenience in forming a "kill -USR1 <pid>" command. (unzip.c, unzpriv.h, vms/vms.c) [SMS] 6.10c09 (7 March 2014): - Added optional support for PPMd compression (method 98). (extract.c, lzma/Ppmd.h, lzma/Ppmd8.c, lzma/Ppmd8.h, lzma/Ppmd8Dec.c, lzma/README_LZMA.txt, unix/configure, unix/Makefile, vms/build_unzip.com, vms/descrip.mms, vms/descrip_deps.mms, vms/descrip_mkdeps.mms, vms/descrip_src.mms) [SMS] - Added a PPMd test archive to the kit, "testmake_ppmd.zip", and a new "make" target, "test_ppmd" to use it. (testmake_ppmd.zip, unix/Makefile, unix/test_unzip.sh, vms/descrip.mms, vms/test_unzip.com) [SMS] - Added recognition (only) of JPEG compression (method 96). (list.c, unzpriv.h, zipinfo.c) [SMS] - Added archive name to user-triggered progress message. (unzip.c) [SMS] - Added data-dependent supplementary info to verbose test (-tv) report for LZMA- and PPMd-compressed data. (extract.c, man/unzip.1) [SMS] - Initial attempt to provide a callable-UnZip interface on UNIX and VMS systems. Specify LIBUNZIP at build time to create libizunzip.a (Unix) or LIBIZUNZIP.OLB and LIBIZUNZIP.OPT (VMS), which may be linked with a user-supplied program. Comments in an example main program source module, libiz/izunzip_example.c, explain some usage details. (libiz/izunzip_example.c, unix/configure, unix/Makefile, vms/build_unzip.com, vms/descrip.mms, vms/descrip_deps.mms, vms/descrip_mkdeps.mms, vms/descrip_src.mms) [SMS] - Initial attempt to support Windows MinGW environment with UNIX builders ("generic" target). No DLL. (unix/configure, unix/Makefile) [SMS] - Added support for BAE Systems STOP OS, which lacks chown(). The "configure" script now checks for chmod() and chown(), and unix.c now honors the resulting NO_CHMOD and NO_CHOWN macros. (unix/configure, unix/unix.c) [SMS] - Extended the -j/--junk-dirs option to accept an optional value, the number of directory levels to discard. Moved code to handle directory junking out of the system-specific mapname[w]() functions into the common extract.c:extract_or_test_entrylist[w](). Not implemented on Tandem. Windows DLL sets uO.jflag from lpDCL->ndflag as well as it can, but needs more than one bit to use the extended capability. (extract.c, globals.h, unzip.c, unzpriv.h, acorn/acorn.c, amiga/amiga.c, aosvs/aosvs.c, atari/atari.c, atheos/atheos.c, beos/beos.c, flexos/flexos.c, human68k/human68k.c, macos/source/macos.c, msdos/msdos.c, netware/netware.c, os2/os2.c, qdos/qdos.c, theos/theos.c, unix/unix.c, vms/cmdline.c, vms/unz_cli.cld, vms/vms.c, win32/win32.c, windll/windll.c) [SMS] - Added C macro DIAG_SFX for developers to enable the "-v" diagnostic report in UnZipSFX. Discouraged for normal use. (unzip.c) [SMS] - On VMS, added HELP_TEXT as a builder option/target. Specifying HELP_TEXT creates the text files UNZIP.HTX and UNZIP_CLI.HTX, which are the output from "help unzip..." commands using the corresponding .HLP help library source files. (vms/build_unzip.com, vms/descrip.mms) [SMS] - VMS CLI changes: Restore but deprecate /[NO]CASE_INSENSITIVE, replace /CASE_MATCH (6.10a07) with more general /MATCH = CASE (-C). When C macro WILD_STOP_AT_DIR is defined, add /MATCH = [NO]WILD_MATCH_SLASH (-W). (vms/cmdline.c, vms/unzip_cli.help, vms/unz_cli.cld) [SMS] - Changed C macro USE_ICONV_MAPPING to ICONV_MAPPING, and added "make" macro ICONV to the Unix builder options to enable the feature. Added ICONV_MAPPING to the "special compilation options" section of the "-v" report. (unzip.c, zipinfo.c, beos/beocfg.h, beos/beos.c, unix/configure, unix/unix.c, unix/unxcfg.h) [SMS] - Format changes to ZipInfo header and totals report sections. The totals section now includes separate member counts for directories and files, and, where SYMLINKS is defined, links. A new option, -mc (--member_counts, /[NO]MEMBER_COUNTS) allows the user to suppress the new directories/files/links counts. Test archives have new-format ZipInfo reports (without the new member counts, to accommodate systems without symlinks). (testmake.zip, testmake_ppmd.zip, unix/Makefile, unix/test_unzip.sh, unzip.c, unzip.h, vms/test_unzip.com, zipinfo.c) [SMS] - Volume labels can now be set on VMS (options: -$, --volume-label, /VOLUME_LABEL). The destination device must be allocated, not shared. (unzip.c, unzip.h, vms/vms.c) [SMS] - Added option -k/--keep-permissions on AtheOS, BeOS, Unix, and VMS, to control how archived permissions or protections are determined on extracted files and directories. The default behavior has changed from previous UnZip versions. Now, by default, on AtheOS, BeOS, and Unix, the current umask value is applied (to the normal user/group/other permissions). On VMS, the current default protection is applied to the UIC-based (SOGW) protections. With -k, the archived permissions are restored without regard to the Unix umask or VMS default protection. (This was the default behavior in previous UnZip versions.) With -k-, the archived permissions are ignored, so only the Unix umask or VMS default protection is effective. (As before, on VMS, directories are always created without any Delete access.) Added new VMS CLI options /RESTORE = PROTECTION = [LIMITED|ORIGINAL] for -k. Define the C macro NO_KFLAG to disable the -k option, and restore the old behavior (or something like it). Forum topic: http://www.info-zip.org/phpBB3/viewtopic.php?f=7&t=100 (atheos/athcfg.h, atheos/atheos.c, beos/beocfg.h, beos/beos.c, man/unzip.1, unix/unix.c, unix/unxcfg.h, unzip.c, unzip.h, unzpriv.h, vms/cmdline.c, vms/unz_cli.cld, vms/unzip_cli.help, vms/UNZIP_DEF.RNH, vms/vms.c, vms/vms.h) [SMS] - Added options -ka/--keep-acl (/RESTORE = ACL) on VMS, to control restoration of ACL. Added VMS CLI option /RESTORE = OWNER (-X) to control restoration of owner/UIC. With -k/--keep-permission (/RESTORE = PROTECTION), these options allow independent control over the restoration of ACL, protection, and owner/UIC. (man/unzip.1, unzip.c, unzip.h, vms/cmdline.c, vms/unz_cli.cld, vms/unzip_cli.help, vms/vms.c) [SMS] - Added options on Mac OS X to provide better control over which Mac-specific file attributes are _not_ restored on extracted files: All extended attributes, -Je/--junk-extattr; Finder info, -Jf/--junk-finder; Quarantine ("com.apple.quarantine"), -Jq/--junk-qtn; Resource fork, -Jr/--junk-rsrc. (By default, all are restored.) Note that the Quarantine attribute is one of the extended attributes, so specifying -Je inhibits restoring the Quarantine attribute, along with all other extended attributes. The extended attribute features are available on Mac OS X 10.4 and later. (The "xattr" command can be used to remove selected attributes after extraction.) (fileio.c, unzip.c, unzip.h, unzpriv.h) [SMS] - Experimental new builders for Microsoft Visual Studio (Visual C++) 2010. Optional feature selection for each program (project) is done entirely using <project> Properties > Configuration Properties > C/C++ > Preprocessor > Preprocessor Definitions > <Edit...>. Some popular options (macros) are included, but are disabled by an easy to remove "x_" prefix. The "unzip" project is used whether or not bzip2 compression support is desired. There is now no separate "unzipbz2" project for UnZip with bzip2 support. The "unzip" and "unzipsfx" projects have been marked as dependent on the "libbz2" project. If a bzip2 source kit has not been installed in the "bzip2/" subdirectory, then the "libbz2" project build will fail, but the "unzip" project build should still succeed, so long as the C macro BZIP2_SUPPORT is not defined. In the "Debug" configuration, DIAG_SFX is defined, which enables the "-v" report in the UnZipSFX executable. (ubz2err.c, win32/vc10/unzip.sln, win32/vc10/funzip/funzip.vcxproj, win32/vc10/funzip/funzip.vcxproj.filters, win32/vc10/libbz2/libbz2.vcxproj, win32/vc10/libbz2/libbz2.vcxproj.filters, win32/vc10/unzip/unzip.vcxproj, win32/vc10/unzip/unzip.vcxproj.filters, win32/vc10/unzipsfx/unzipsfx.vcxproj, win32/vc10/unzipsfx/unzipsfx.vcxproj.filters, wrap/aescrypt.c, wrap/aeskey.c, wrap/aestab.c, wrap/crc_i386.c, wrap/fileenc.c, wrap/hmac.c, wrap/LzFind.c, wrap/LzmaDec.c, wrap/Ppmd8.c, wrap/Ppmd8Dec.c, wrap/prng.c, wrap/pwd2key.c, wrap/sha1.c) [SMS] - Command-line syntax errors should now trigger a Usage explanation, like the brief help (-h, /HELP) report. When triggered by an error, this report now includes a listing of any options environment variables (UNZIP, UNZIPOPT, UNZIP_OPTS, ...) which are defined (and might be causing trouble in non-obvious ways). The -v (/VERBOSE) report still shows all the options environment variables, whether or not they're defined. If enough users object to the (bulky?) Usage report, we may be persuaded to provide a way to disable it. (unzip.c, unzpriv.h, vms/cmdline.c) [SMS] - VMS CLI changes. Added /[NO]JAR (--jar), /WILD_MATCH (-W). Deprecated /[NO]TIMES in favor of new /[NO]DECIMAL_TIME. (vms/cmdline.c, vms/unz_cli.cld, vms/unzip_cli.help) [SMS] - The Unix and VMS builders now support "PROD=subdir", allowing the user to specify a destination subdirectory for product files (object files, object libraries, executables, and so on), instead of getting everything in the main, top-level directory on Unix, or the automatically chosen subdirectory on VMS. This feature is intended to make it easier to use one source tree for multiple build configurations (different compilers, options, hardware architectures, and so on). For details, see INSTALL and [.vms]INSTALL_VMS.txt (and the builder files themselves). (INSTALL, unix/configure, unix/Makefile, unix/mlz.sh, vms/build_unzip.com, vms/descrip.mms, vms/INSTALL_VMS.txt) [SMS] - Experimental implementation of symbolic links on Windows (Vista or later?). To activate, define C macro SYMLINKS. Slightly improved symlink error handling/messages on all symlink-capable system types. On Windows XP, the build may work with SYMLINKS defined, but the resulting UnZip executable may fail immediately with exit status (Command Prompt: %ERRORLEVEL%, PowerShell: $LASTEXITCODE) -1073741511 (0xC0000139), "Entry Point Not Found", possibly with a pop-up message which mentions CreateSymbolicLinkA (and KERNEL32.dll). (extract.c, fileio.c, unzpriv.h, win32/w32cfg.h, win32/win32.c) [SMS] - Added initial support in ZipInfo for a proposed extra field type (0x414c = "LA") containing attributes which are missing from the local directory header. (unzpriv.h, zipinfo.c) [SMS] - Added --version as a synonym for -v/--verbose. When used as the only option, the program version, build options, and relevant environment variables are displayed. (unzip.c, unzip.txt, unzpriv.h, man/unzip.1) [SMS] - Added library interface function UzpFeatures() to provide an optional-feature string (a program-friendly edition of the "special compilation options" section of the "-v/--verbose" report. (api.c, unzip.h, libiz/izunzip_example.c, windll/vc10/windll32.def) [SMS] - Added new -da/--auto-extract-dir (/[NO]AUTO_DIRECTORY) option to specify a destination directory for extracted files which is derived from the base name of the archive. For example, with -da, extraction of "fred.zip" is done into subdirectory "fred" instead of into the current directory. (On VMS, subdirectory "[.fred]".) Added new exit status value, IZ_BADDEST (84), for failure to create automatic destination directory. (fileio.c, process.c, unzip.c, unzip.h, man/unzip.1, vms/cmdline.c, vms/unzip_cli.help, vms/UNZIP_CLI.RNH, vms/unz_cli.cld, vms/vms.c) [SMS] - Added new command-line (argc, argv[]) interface to the Windows DLL, which should be more stable than the old binary structure interface. A revised example program, unzipstb.c (now in the windll/ directory), illustrates usage. (api.c, unzip.c, unzip.h, unzpriv.h, zipinfo.c, win32/win32.c, windll/unzipstb.c, windll/windll.c, windll/windll32.def, windll/vc10/unzip32_dll.sln, windll/vc10/unzip32_dll/unzip32_dll.vcxproj, windll/vc10/unzip32_dll/unzip32_dll.vcxproj.filters, windll/vc10/unzipstb/unzipstb.vcxproj, windll/vc10/unzipstb/unzipstb.vcxproj.filters) [SMS] 6.10c10 (18 Aug 2014): - Added initial support for Windows directory symlinks (using a symlink name with a trailing slash) on Unix, VMS, and Windows. (extract.c, process.c, unzpriv.h, zipinfo.c, unix/unix.c, vms/vms.c, win32/w32cfg.h, win32/win32.c) [EG, SMS] 6.10c11 (10 Oct 2014): - Added option -0/--no-char-set (/NAMES = [NO]CHAR_SET) to suppress certain character mapping (CP850) in some extracted file names. ("-0" is hyphen+zero.) Historically a particular character mapping was applied (and still is, by default) to the names of archive members which originated on a FAT or NTFS file system (typically on an MS-DOS or Windows system). This can cause unexpected characters in extracted file names if the corresponding (inverse) mapping was not used when the archive was created. With -0/--no-char-set, the extracted file name should agree with the name stored in the archive. -0/--no-char-set is supported on all operating systems. On Unix (or BeOS) it effectively overrides any -I/--iso-char-set or -O/--oem-char-set option which may also be specified. Forum topic: http://www.info-zip.org/phpBB3/viewtopic.php?f=4&t=447 (fileio.c, unzip.c, unzip.h, man/man1/unzip.1, vms/cmdline.c, vms/unzip_cli.help, vms/unz_cli.cld) [SMS, JBCarpen] - A Bzip2 source kit (version 1.0.6, modified for better VMS support) is now included in the kit. (Old bzip2/descrbz2.mms removed. bzip2/README_bz2.txt, bzip2/) [SMS] - Changed Unix and VMS builders: - Enable bzip2, LZMA, and PPMd compression support by default. - On VMS, enable large-file support by default on Alpha and IA64 (with a run-time check on Alpha, using a new DCL script). - On Unix, enable AES_WG support by default, if AES_WG source kit is available. - On VMS, notify user if AES_WG source is available but not used. - Minor typography changes. (INSTALL, unix/configure, unix/Makefile, unix/unsafe_prod.sh, vms/build_unzip.com, vms/check_large.com (new), vms/collect_deps.com, vms/descrip.mms, vms/descrip_mkdeps.mms, vms/descrip_src.mms, vms/INSTALL_VMS.txt) [SMS] 6.10c12 (31 Oct 2014): - Changed Windows (win32\vc10) and Windows DLL (windll\vc10) builders: - Enabled bzip2 compression support by default. - Added x64 platform to projects, disabling 32-bit assembly code explicitly (ASM_CRC). (win32/vc10/unzip.sln, win32/vc10/funzip/funzip.vcxproj, win32/vc10/libbz2/libbz2.vcxproj, win32/vc10/unzip/unzip.vcxproj, win32/vc10/unzipsfx/unzipsfx.vcxproj, windll/vc10/unzip32_dll.sln, windll/vc10/libbz2/libbz2.vcxproj, windll/vc10/unzip32_dll/unzip32_dll.vcxproj, windll/vc10/unzipstb/unzipstb.vcxproj, windll/vc10/uzexampl/uzexampl.vcxproj) [SMS] - Minor code changes to accommodate Windows x64 builds: - Changed some types and added some type casts. - Changed system identification text in the "-v" report. - Disabled 32-bit assembly code (ASM_CRC) when _WIN64 is defined. (extract.c, fileio.c, globals.h, process.c, unzpriv.h, win32/w32cfg.h, win32/win32.c, windll/windll.c, zipinfo.c) [SMS] 6.10c13 (17 Dec 2014): - No news. 6.10c14 (03 Jan 2015): - No news. 6.10c15 (12 Jan 2015): - Included public-domain code from Peter Backes for the (obsolete) Reduce compression method. (Some minor changes were made to clear some diagnostics from modern compilers, and to accommodate inclusion by unreduce.c.) To enable Unreduce support using the public-domain code, define the C macro USE_UNREDUCE_PUBLIC. To enable Unreduce support using the copyrighted Unreduce code, define the C macro USE_UNREDUCE_SMITH (or, for compatibility with old code and documentation, USE_SMITH_CODE), and supply the source file unreduce_full.c. See INSTALL for details. The C macro COPYRIGHT_CLEAN has been removed from the code and from the "UnZip special compilation options" ("-v") report. The new USE_UNREDUCE_xxx macros appear instead. http://sourceforge.net/p/infozip/patches/18/ (api.c, COPYING.OLD, expand.c (new), extract.c, INSTALL, unix/Makefile, unreduce.c, unzip.c, unzpriv.h, vms/descrip_deps.mms, vms/descrip_mkdeps.mms) [Peter Backes, SMS] 6.10c16 (18 Mar 2015): - Changed the ZipInfo version numbering to use the same value as the the corresponding UnZip version. So, what would have been ZipInfo version 3.10 will instead be designated version 6.10 (like UnZip). (unzvers.h) [SMS] - Added tentative, experimental-grade support for streaming input archives on Unix systems. The C macro USE_EF_STREAM is now defined by default to enable support for the new Zip "xl" (0x6c78) streaming extra field. Define ARCHIVE_STDIN to enable support for streaming input archives. Extensive refactoring of extract.c could have introduced new defects. Some accommodation was attempted for Windows, but not tested. (extract.c, fileio.c, globals.c, globals.h, process.c, unix/unix.c, unix/unxcfg.h, unzip.c, unzpriv.h) [SMS] - Added tentative, experimental-grade support for segmented (multi-part) archives. Patch contributed by Petr Stodulka. Forum topic: http://www.info-zip.org/phpBB3/viewtopic.php?f=4&t=455 Currently, only multiple segment files on one volume ("split" archive), with name extensions ".z01", ".z02", ..., ".zip" are supported; multiple volumes ("spanned" archive) are not. (extract.c, fileio.c, globals.c, globals.h, process.c, unzip.c, unzpriv.h, vms/vms.c, zipinfo.c, zos/vmmvs.c) [Petr Stodulka, SMS] 6.10c17 (18 Mar 2015) - No news. 6.10c18 (20 Mar 2015): - No news. 6.1c19 (26 Jun 2015) - Changed the displayed program version number to omit the PATCH_LEVEL digit when it's zero, so, henceforth, UnZip version 6.1 will generally be called version "6.1", not "6.10". Added -vq/--quick-version (/VERBOSE=BRIEF) option to provide a brief (one-line) program version report. (BUGS, Contents, INSTALL, README, unzip.c, unzip.h, unzip610c.ann, unzpriv.h, unzvers.h, zipinfo.c, docs/Contents, docs/unzip.txt, docs/unzipsfx.txt, docs/zipinfo.txt, libiz/Contents, man/Contents, man/man1/Contents, man/man1/unzip.1, man/man1/unzipsfx.1, man/man1/zipinfo.1, unix/Contents, unix/README.zOS, vms/build_unzip.com, vms/cmdline.c, vms/Contents, vms/descrip.mms, vms/descrip_mkdeps.mms, vms/descrip_src.mms, vms/INSTALL_VMS.txt, vms/unzip_cli.help, vms/UNZIP_DEF.RNH, vms/unz_cli.cld, win32/Contents, windll/Contents, wrap/Contents) [SMS] 6.1c20 (20 Sep 2015): - Defining the C macro NO_BUILD_DATE now suppresses the display of the build date in the "-v" (/VERBOSE) report (for example, "Compiled with [compiler version] on Jul 26 2015."). Compiling with this macro defined makes the build reproducible. Forum topic: http://www.info-zip.org/phpBB3/viewtopic.php?f=7&t=490 (acorn/acorn.c, amiga/amiga.c, aosvs/aosvs.c, atari/atari.c, atheos/atheos.c, beos/beos.c, flexos/flexos.c, human68k/human68k.c, macos/source/macos.c, macos/source/sxunzip.c, msdos/msdos.c, netware/netware.c, os2/os2.c, qdos/qdos.c, tandem/tanunz.c, theos/theos.c, tops20/tops20.c, unix/unix.c, vms/vms.c, win32/win32.c, zos/vmmvs.c) [sanvila, SMS] 6.1c21 (30 Oct 2016): - Changed the command-line syntax of the Windows test command script to allow the user to specify a particular UnZip program name, instead of "unzip". This allows the test script to be used with the UnZip-like example programs supplied with DLL (windll/unzipstb.c) or static library (winlib/izunzip_example.c). (win32/test_unzip.cmd) [SMS] - Revised Usage text, and, on VMS, the DCL foreign-command symbol suggestions. Other related, minor code tidying. (unzip.c, unzip.h, unzpriv.h, vms/cmdline.c) [SMS] 6.1c22 (08 Jun 2017): - No news. 6.1c23 (11 Dec 2017): - No news. Bugs fixed: 6.10a00 (05 Jul 2010): - No bug fixes. 6.10a01 (05 Jul 2010): - No bug fixes. 6.10a02 (10 Jul 2010): - No bug fixes. 6.10a03 (30 Jul 2010): - Fixed compile problems involving funzip and use of zlib. (inflate.c) [SMS] - Changed SFX to allow --license, but not --options. Removed some redundant "BETA" messages, and an unreachable "return". (unzip.c) [SMS] - Fixed various builder problems involving the use of zlib, or when defining BZIP2_SFX to get bzip2 compression support in UnZipSFX. (unix/configure, unix/Makefile) [SMS] - Changed some UNIX system ID info to agree with the more precise names used by Zip. For example, "(HP-UX)" -> "(HP-UX B.11.31 ia64)". (unix/unix.c) [SMS] - Changed VMS version (";nnn") deletion code to leave ";" (no digits) unchanged. (acorn/acorn.c, amiga/amiga.c, aosvs/aosvs.c, atari/atari.c, atheos/atheos.c, beos/beos.c, flexos/flexos.c, human68k/human68k.c, macos/source/macos.c, msdos/msdos.c, netware/netware.c, os2/os2.c, qdos/qdos.c, tandem/tanunz.c, unix/unix.c, vms/vms.c, win32/win32.c) [SMS] - Changed argc+1 to argc to work with new parser. Removed CMS_MVS 'U' option. Changed u0.L_flag-negative to u0.L_flag-1 as negative is now always 0 or 1. (unzip.c) [EG] 6.10a04 (05 Aug 2010): - Set minimum value of u0.X_flag to -1 instead of 0, allowing flag to take on values -1, 0, and 1. Update -S flag comment. (unzip.c) [SMS] - Change vms_unzip_cmdline() from ulg to unsigned. (unzpriv.h) [SMS] - Add newlines to command parser error messages. (unzip.c) [EG] 6.10a05 (08 Aug 2010): - Change fnfilter() from using code used for Unicode for wide character conversions to using standard ANSI wide calls, avoiding dependencies on zwstring and so the need to restructure that code so it works in all contexts. (extract.c) [EG] 6.10a06 (09 Aug 2010): - Add (char *) casts in fnfilter(). Add (ulg) cast in utf8_to_ucs4_string(). (extract.c, process.c) [SMS] 6.10a07 (10 Aug 2010): - Add more -q- to cancel possible previous -q. (vms/cmdline.c) [SMS] 6.10a (23 Aug 2010): - Worked around a limitation in VAX C V3.1-051 involving "\"-continuation of "#if" directives. Restored lost "-J" to option table on Mac OS X. Created J_FLAG macro to enable -J option. (unzip.c, unzip.h) [SMS] 6.10b01 (12 Sep 2010): - Some fixes to Unicode processing in association with Win32 implementation. (See above file list). [EG] 6.10b02 (16 Sep 2010): - Avoid ISO/OEM translation if main path has UTF-8 bit set. Changed == to >= in version check. (unzip.h, fileio.c) [from forum "Info-ZIP Bugs > UnZip Bugs > unzip UTF8 on linux" thread. [(dennislkj), EG] 6.10b03 (06 Nov 2010): - Add __G__ to multiple places to fix compile problems if REENTRANT is defined. (process.c, unzip.c, unzip.h, unzpriv.h, zipinfo.c, vms/vms.c) - Move local variable uxattr definition higher up. Set DOS subdir bit if entry path ends in "/". Get process RMS_DEFAULT values only if not REENTRANT. (vms/vms.c) [SMS] - Change dw->fn to wide version dw->fnw in Trace statement. Free structure values G.unipath_filename and G.unipath_widefilename to help debugging. Set G.unipath_widefilename to either translated G.unipath_filename if set or translation of standard G.filename, to fix bug where this was not set when using Unicode in Win32 and no Unicode for this entry. (extract.c) [EG] - Change (1 << 11) to UTF8_BIT macro. (extract.c, process.c) [EG] - Bit 2 of internal attributes for an entry is the PKWare verification bit. When this bit is set, a verification checksum is in the first 3 bytes of the external attributes. In this case, only use last byte of external attributes by clearing other bytes in G.crec.external_file_attributes. (process.c) [EG] - Add check for NO_UNICODE_SUPPORT. Automatically set WIN32_WIDE on Windows if UNICODE_SUPPORT set. Remove UNICODE_SUPPORT and WIN32_WIDE macros from project. (win32/w32cfg.h, win32/vc6/unzip.dsp) [EG] - Some #if #endif formatting. Long option help updates. Minor updates for -I and -O options. (unzip.c) [EG] - Added missing __G__ to WinDLL function call. Added missing buffer size parameter to DLL *G.lpUserFunctions->replace() callback function. DLL compiles, but needs testing. (extract.c) [EG] 6.10b04 (25 Nov 2010): - See features above for some related bug fixes. 6.10b05 (29 Nov 2010): - Fix bug from previous fix where uxattr was not being set reliably. (vms/vms.c) [SMS] 6.10b06 (03 Dec 2010): - No bug fixes. 6.10b07 (05 Dec 2010): - Fix bug by adding missing line end. (vms/hlp_lib_next.com) [SMS] 6.10b (10 Dec 2010): - No bug fixes. 6.10c01 (15 May 2011): - VMS-specific problem could cause "unzip -a" to truncate the last line in a text file which had a one-character line ending (like LF) which fell at the end of an internal buffer. (vms/vms.c) [SMS] 6.10c02 (28 May 2011): - Changed the exit handler to use echorig() to restore the original terminal echo setting, instead of echon() to enable echo unconditionally. (Actually implemented only on VMS.) (fileio.c, ttyio.c, ttyio.h) [SMS] - Changed the carriage-control scheme used when an unfinished output line to stdout is interrupted by an error message to stderr. On VMS, the old method produced spurious blank lines, and error messages could be overwritten by succeeding output lines. Please report any new problems with error message format/placement. (extract.c, fileio.c, globals.h, process.c) [SMS] - Updates to decrypt() to fix some minor AES header length issues. (crypt.c) [SMS] - Update testkey() for AES. (crypt.c) [SMS] - Minor bug fixes for AES and for making crypt similar in Zip and UnZip. (crypt.h) [SMS] - Add extra field processing for AES. Account for extra AES data in file data. Replace fprintf() use with Info(). (extract.c, unzpriv.h) [SMS] - Additional AES fixes. (fileio.c, globals.h) [SMS] - Spelling fixes. (history.600, readme, unzip.h, unzpriv.h, cmsmvs/vmmvs.h, macos/history.txt, windll/contents) [SMS] - Minor wording updates. Add descriptions for CRYPT_AES_WG and AES_WG_SFX. Describe support for new CC=gcc format for parameters. (INSTALL) [SMS] - Update method list to include AESencr. (list.c) [SMS] - Update VMS example in help message. Add -v line for CRYPT_AES_WG. Change compiler option error from PK_BADERR to PK_COMPERR. Add byte endian runtime check. Remove CryptDate from Crypt -v line. (unzip.c, unzip.h) [SMS] - Add AES support to SFX. Define AESENCRED as 99. Define EF_AES_WG as 0x9901. (unzpriv.h) [SMS] - Update comments to match latest makefile changes. Remove support for gcc target as the CC=gcc parameter covers that now. (unix/configure) [SMS] - Message wording changes. (vms/collect_deps.com) [SMS] - Add new COMPERR error. (vms/unzip_msg.msg) [SMS] - Change NAM to NAMX. Add some SYS defines. (vms/vms.c, vms/vms.h, vms/vmscfg.h) [SMS] - Reset file pointer even on failure to fix problem. (win32/win32.c) [????] - Add (int) cast to n assignment in testkey() for type mismatch. (May limit the range of test cases.) (crypt.c) [EG] - Miscellaneous code tidying (white space, mostly). (crypt.c, extract.c, fileio.c, match.c, unzip.c, acorn/acorn.c, unix/unix.c, unix/unxcfg.h, vms/cmdline.c, win32/win32.c) [SMS] 6.10c03 (02 Aug 2011): - Replace crypt.c with version from Zip 3.1d14. In brief, changes for AES_WG, updates in AES_WG and ZCRYPT documentation, fix eb_eas == NULL issue, zipcloak() updates, change STANDARD_ENCRYPTION to TRADITIONAL_ENCRYPTION, fix AES_WG password and MAC issue, remove Win32 entropy_fun(), and add some type casts. (crypt.c) [SMS] - Change AES to AES_WG. (crypt.h, extract.c, globals.h, unzip.c, zipinfo.c) [SMS] - Add BadEasMacMsg message. Change #if defined(CRYPT) to #if CRYPT. Pass in cmpr_vers_aes to ef_scan_for_aes(). Change bytes_put_out from zoff_t to zusz_t. Add aes_wg_mac storage. Clear aes_mac_mismatch if entry not AES encrypted. Update bytes_put_out loop. Add aes_mac_mismatch error message. Fix MAC issue. (extract.c) [SMS] - Add size check before calling fcrypt_decrypt(). (fileio.c) [SMS] - Add ucsize_aes global for AES uncompressed bytes left do decrypt. (globals.h) [SMS] - Change AESencr to AES_WG as compression method name. (list.c) [SMS] - Formatting updates. Remove tabs. (match.c, acorn/acorn.c, unix/unix.c, unix/unxcfg.h, vms/cmdline.c) [SMS] - Include aes_wg/iz_aes_wg.h. Change elif to else if. (unzip.c) [SMS] - Remove unused constant UNZIP_AESVERS as there is no specific PKZIP version associated with WinZip AES encryption. (unzpriv.h) [SMS] - Add IZ_MIN() for doing min of two values. (unzpriv.h) [SMS] - Change AES-ed to AES_WG-ed. Update AES extra field output. Interpret AES extra field. (zipinfo.c) [SMS] - Update aes_wg directory to use latest IZ_AES_WG files. Remove original files, just keep current files. (aes_wg/aes.h, aes_wg/aescrypt.c, aes_wg/aeskey.c, aes_wg/aesopt.h, aes_wg/aestab.c, aes_wg/brg_endian.h, aes_wg/fileenc.c, aes_wg/fileenc.h, aes_wg/hmac.c, aes_wg/hmac.h, aes_wg/iz_aes_wg.h, aes_wg/license.txt, aes_wg/main.c, aes_wg/prng.c, aes_wg/prng.h, aes_wg/pwd2key.c, aes_wg/pwd2key.h, aes_wg/sha1.c, aes_wg/sha1.h) [EG] - Change AES to AES_WG. Other minor updates for AES_WG encryption. (unix/configure) [SMS] - Change aes to aes_wg. Update command line help. Move instructions for manuals to end of help. Change LIB_AES to LIB_AES_WG. Change some single quotes to double quotes. Add -DNO_LCHMOD to unzips rule for rs6000 (IBM RS/6000 under AIX 3.2). (unix/makefile) [SMS] - Change AES to AES_WG. Change ZIP.OLB to UNZIP.OLB. Add UNZIPSFX library replace. (vms/build_unzip.com) [SMS] - Documentation updates. (vms/descrip.mms) [SMS] - Changes to convert from AES to AES_WG. (vms/descrip_deps.mms, vms/descrip_mkdeps.mms) [SMS] - Remove VAXC, GNUC dependencies. Change AES to AES_WG. Add SFX object library. (vms/descrip_src.mms) [SMS] - Update multi-line string formatting. (win32/win32.c) [SMS] - Update options list for UnZip for -C, changing ZIO to UZO in UZO (UnZip) list so option is available to UnZip. Option had been put twice in ZipInfo (ZIO) list. (unzip.c) [EG] - Add comment about disk number == 1. (process.c) [EG] 6.10c04 (05 Aug 2011): - Restore some Mac-specific AppleDouble-related code which got omitted between 6.10a and 6.10b(?) (extract.c) [SMS] - Restore lost code for enhanced "apparent file type" message in ZipInfo. A hex value is now included, to show useful info for unexpected values (not "binary", "ebcdic", or "text"). zipinfo.c [SMS] - Restore lost change enabling "-s" everywhere. Restore lost change to VMS usage text. (unzip.c, unzip.h) [SMS] - Remove an unused variable (aes_strngth). (zipinfo.c) [EG, SMS] - Reform a defective ZCRYPT version test, now handling version 3.0 case. (ttyio.c) [SMS] - Replace obsolete test Zip archive, to give "make test" a chance to succeed. (testmake.zip) [SMS] - Add "testmake_zip" target to UNIX "make" file, to help in creating testmake.zip. (Formerly not done on UNIX.) (unix/Makefile) [SMS] - New command-line processing in ZipInfo miscounted non-option arguments, causing loss of the heading and total sections in default reports. (zipinfo.c) [SMS] - New command-line processing in UnZipSFX lost the first non-option argument (member to extract, not archive name). (unzip.c) [SMS] - Various VMS CLI bad behavior involving /HELP and /VERBOSE. (vms/cmdline.c) [SMS] - Remove _orig files. (crypt.c_orig, crypt.h_orig, extract.c_orig, fileio.c_orig, globals.h_orig, INSTALL._orig, list.c_orig, process.c_orig, README._orig, ttyio.c_orig, ttyio.h_orig, unshrink.c_orig, unzip.c_orig, unzip.h_orig, unzpriv.h_orig, zipinfo.c_orig, unix/configure._orig, unix/Makefile._orig, unix/unix.c_orig, vms/build_unzip.com_orig, vms/collect_deps.com_orig, vms/descrip.mms_orig, vms/descrip_deps.mms_orig, vms/descrip_mkdeps.mms_orig, vms/descrip_src.mms_orig, vms/vms.c_orig, vms/vms.h_orig, vmscfg.h_orig) [EG] - Rename bzip2 readme from 00README.IZ to README_bz2.txt. (README_bz2.txt) [EG] - Update Contents. Add lzma. (Contents) [SMS] - Minor changes to Contents. (Contents) [EG] - Update crypt to version 3.0. (crypt.h) [SMS] - Update VCC6 project to look for AES_WG files in aes_wg. (win32/vc6/unzip.dsp) [EG] - Allow Total Disks (ecloc64_total_disks) to be 0, as some archive creator out there sets this to 0 incorrectly instead of 1. However, probably no reason we can't just go with it. This only is relevant for Zip64 archives. (process.c) [EG] - Change i and b to unsigned in AES_WG endian test. (unzip.c) [SMS] - Add possible fix for MINIX needing <unistd.h>. (unzpriv.h) [SMS, adapted from user suggestion] - New UNIX(-like) shell script for basic UnZip testing. Builder changed to use it, instead of in-line actions. (unix/Makefile, unix/test_unzip.sh) [SMS] - VMS builders now generate module-ID options files. vms/unzip.opt and vms/unzipsfx.opt have been removed from the kit. Add new NOCOMPILE, NOEXE, LZMA, and TEST commands. Command-line options for the VMS DCL builder should now agree better with those for Zip. (vms/build_unzip.com, vms/descrip.mms, vms/unzip.opt (removed), vms/unzipsfx.opt (removed), vms/optgen.com (new)) [SMS] - Added VMS CLI option, /LICENSE, equivalent to --license. Change VERBOSE to VERBOSE.COMMAND for verbose_command. Update to use -h and -hh help options supported by new command line parser. (vms/cmdline.c, vms/unz_cli.cld, vms/unzip_cli.help) [SMS] - Significant updates to VMS Contents. (vms/contents) [SMS] - New VMS DCL procedure for basic UnZip testing. New MMS/MMK builder target, TEST, to run it, and CLEAN_TEST to clean up after it. (vms/descrip.mms, vms/test_unzip.com (new), vms/install.vms) [SMS] - Add definition of C macro _SZ_NO_INT_64 for LZMA on VAX. (vms/descrip_mkdeps.mms, vms/descrip_src.mms) [SMS] - Initial update to README. (README) [SMS] 6.10c05 (13 Aug 2011): - Bug fix for array overflow and slight enhancement of "Available options" listing. (unzip.c) [EG] - Fix for improper argument count for -Z bug. (zipinfo.c) [EG, SMS] 6.10c06 (24 Aug 2011): - Change UNZIP_BZ2VERS to UNZIP_BZIP2_VERS to be consistent with other version macros. Set UnZip (compatible with) version based on inclusion of BZIP2 or LZMA support. (extract.c, unzpriv.h) [SMS] - Change %ld in a Trace() to %lld. (This would be incompatible with Win32, which uses %I64d, but not a problem unless Trace() is used.) Remove G.incnt < LZMA_PROPS_SIZE + 4 check from LZMA properties length check. (extract.c) [SMS] - Add (unsigned int) cast to ucsize assignment to fix 64-bit to 32-bit assignment. (extract.c) [EG] - Add (long) cast to G.ucsize_aes in IZ_MIN() to fix 64-bit to 32-bit assignment. (fileio.c) [EG] - Rename 7z* files to Sz*. (unzip.c, SzVersion.h, lzma/7zFile.c (remove), lzma/7zFile.h (remove), lzma/7zVersion.h (remove), lzma/SzFile.c, lzma/SzFile.h, lzma/SzVersion.h) [SMS, EG] - Add encryption notices. (unzip.c) [SMS] - Update LZMA Readme. (README_LZMA.txt) [SMS] - Change 7z* to Sz*. Explicitly use sh to run test_unzip.sh. (unix/makefile) [SMS] - For VMS, update comments for SFX regarding AES_WG and LZMA. Note that SFX does not include AES_WG by default. Change 7z* to Sz*. (vms/build_unzip.mms, vms/descrip.mms, vms/descrip_deps.mms, vms/descrip_src.mms) [SMS] - Update VMS Install documentation. (vms/install.vms) [SMS] - Minor updates to VMS test script. (vms/test_unzip.com) [SMS] - Repackage Win32 VC 6 projects, creating new project unzipaes for AES_WG and moving configurations dependent on AES files in the aes_wg directory to that project. Remove AES_WG dependencies from unzip project. Add LZMA configurations to the unzip and unzipaes projects. Currently the VC 6 configurations depend on the LZMA files being present (they are part of the source distribution so they should be). The user ignores those files when they select a configuration that does not use them. Added missing Release configurations. The ASM (assembly) configurations are not updated yet to support AES_WG or LZMA. (win32/vc6/unzip.dsp, win32/vc6/unzip.dsw, win32/vc6/unzipaes.dsp) [EG] 6.10c07 (12 Sep 2011): - Change type of ucsize_lzma to SizeT. (extract.c) [SMS] - CF_BZ now has "-DBZ_NO_STDIO" to build correct bzip2 variation. (unix/configure, unix/Makefile) [AD] - CF_BZ now contains "-D_FILE_OFFSET_BITS=64 -D_LARGE_FILES" if large files supported. (unix/configure) [AD] - Customize unzip unix/unxcfg.h for time.h et al. (unix/configure) [AD] - Add fix for symlink bug. (See http://comments.gmane.org/gmane.comp.version-control.git/181165). From Andreas Schwab: "This only happens if you have more then 16K entries and when one of the 16K entry infos is reused it happend to be previously used for a symlink entry." Patch provided. (process.c) [AS] 6.10c08 (22 Nov 2011): - Add (wchar_t *) casts to wstring malloc(). (extract.c) [SMS] - Remove wchar.h include. Add parentheses around wide_string[] assignment in for loop to quiet complaint by a particular compiler. [SMS, AD] - Add note regarding possible morphing of unzpriv.h to something more like tailor.h. (Could happen.) Copy over UNICODE_SUPPORT comment from Zip detailing the current plan for unifying Unicode code to just three possibiities: UNICODE_WIDE, UNICODE_ICONV, and UNICODE_NATIVE. Change "#define BSD" to "#define BSD 1". Copy over DBCS Japanese support comment. Always include stdlib.h if UNICODE_SUPPORT defined. Copy over wchar and langinfo support headers from Zip. Add MBCS comment noting possible use of replacement functions when available. Copy over in comments some Zip MBCS code. (unzpriv.h, unix/unxcfg.h) [AD] - Include unistd.h where available, mainly for SunOS. (lzma/szfile.h) [SMS] - Comment updates in top section. Attempts at making the Zip and UnZip configure scripts similar. Formatting updates. Add message: "Generating system-dependent flags...". Split up parameter list in valid_vars. Remove -DUNIX from CFLAGS. Define AR_BZ for bzip2. Change manuals output dir to manout. Default PORT to empty instead of "unix." Default AES_WG, LZMA, IZ_BZIP2, and IZ_ZLIB to empty if not already defined. Define PORT_SPEC for port specification method. Remove OSDEP_C and OSDEP_S. Remove MANTAB. Minor changes to output build messages. Assign default PORT setting. Set PORT_SPEC to I (implicit) if PORT is unix, else E (explicit). Output UNAME_S as OS name. Add quotes around some variables. Add tests for MinGW 64, MinGW 32, LLVM, LLVM Clang, LLVM GCC. Add Darwin check for obsolate -s option. Add tests for Portable C (PCC), EKOPath, Intel, GNU C, CNU C for Mac OS X, AIX. Update defines for CC_TST, CFLAGS_OPT, CFLAGS_TST, and AR_BZ for each port. Add test for DJGPP, CYGWIN. Set build configuration for various targets: msdos, os2, qdos, zos, zvm. Add "fix me" note for assembler CRC code. Change some output error messages to use ^^ prefix as in Zip. Add "No AES_WG encryption", "No LZMA compression", "No BZIP2 compression", and "ZLIB not used" messages as in Zip. Error message updates similar to Zip. Add comment describing HAVE_HEADER_H, HAVE_DIR_HEADER_H, NO_HEADER_H, NO_DIR_HEADER_H, FUNCTION=function, and NO_FUNCTION. Remove HPUX ANSI test. Add off_t and UID/GID messages from Zip. (The UID/GID code, in particular, may not be appropriate for UnZip, but this should be corrected in a later beta.) Update sys/time.h messages. (Not sure if these are appropriate to UnZip. It's possible that UnZip would work, but that checking for unneeded features could prevent it from building.) Add wchar.h checks. Update wide character support checks to match those in Zip. Update check for missing functions. Add "FIX ME" note for langinfo.h. Change ${CFLAGS} to ${CFLAGS_TST} in assignment. Update MBCS functions check. Output end blank line. (unix/configure) [SMS, AD] - Update Makefile instructions at top to be similar to Zip. Update list of targets. Add additional instructions and guidance from Zip. Update AR to change -cq to cq. Add note about OSDEP_H, OS_DEPOC, and OSDEP_OS. Update note on Assembler to mention msdos/crc_i86.S. Remove PGM_ZINFO from UNZIP_PGMS. User manout for output directory of manuals. Put plain text versions of manuals in root directory as have traditionally done. Use PGM_* variables to set BIN_* variables. Add note about C files when cross compiling and PORT parm. Change note on api.o rule from "object files" to "C Compile rule" for unzip DLL. Add comment separator lines around AES code and LZMA code. Update BZIP2 test to use "@if [ flags_bz ];" instead of "@if test -f flags_bz;". Change "-> zips' to "-> unzips". Change manl rule to manout. Update text output rules for manuals based on Zip updates including using man instead of nroff. Add "Running: unix/configure" message. Add PROD parameter to unix/configure. Add note on BZIP2 flags. Add PGM_ZINFO to clean rule. Add clean_docs rule for cleaning the plain text docs as was done in Zip. Update install rule. Remove duplicate "Originally tested under Sun" comment. Add generic build warning message. Rephrase some comments for generic rules. Update rules list for specific ports. Remove OSDEP_C and OSDEP_S from linux_dos rule. Remove some space from comments and messages. (unix/Makefile) [SMS, AD] - Add compiler identification for NeXT DevKit, MinGW 64, MinGW 32, LLVM Clang, LLVM Apple GCC, LLVM GCC, Portable C, EKOPath C, Intel C, GCC, and SunPro C. Ignore case of "CRAY" define. Reformat IBM version. Reformat sprintf() lines for specific compiler versions. Change (bad) Mac OS X message string '" (Mac OS X")' to '" (Mac OS X)"'. (unix/unix.c) [AD] 6.10c09 (8 May 2014): - Minor code tidying: UZbunzip2() and UZlzma() are now static. (extract.c, unzpriv.h) [SMS] - A bare "#if" directive embedded in a multi-line comment block confused old C preprocessors (SunOS 4.1.4 bundled C, VAX C V3.1-051). (unzpriv.h) [SMS] - Less lame handling of LZMA and PPMd data structures. More things are allocated and/or initialized once per job, rather than once per archive member. (extract.c, globals.h, process.c) [SMS] - Removed definition of unused LZMA- and PPMd-related C macro _7ZIP_ST from builders. (unix/configure, vms/build_unzip.com, vms/descrip_src.mms) [SMS] - Miscellaneous code tidying for user-triggered progress message on VMS: Portability to old VAX versions, coping with batch mode, better comments and messages. (vms/vms.c, vms/vmscfg.h) [SMS] - Removed lzma/Alloc.c and lzma/Alloc.h (MyAlloc() and MyFree() functions). (extract.c, unix/Makefile, vms/descrip_src.mms) [SMS] - Remove (unused) lzma/SzFile.c and lzma/SzFile.h. (unix/Makefile, vms/descrip_src.mms) [SMS] - Bad hard-coded string length in message function could put a spurious NUL character into messages. (Typically invisible on screen, but ugly in redirected output.) (fileio.c) [SMS] - On Unix, "make clean" missed some spots. (unix/Makefile) [SMS] - A user-specified CFLAGS value for UNIX(-like) builds no longer needs to include "-I.". (unix/configure) [SMS] - Some Clang and GCC versions would emit many "warning: format string is not a string literal" or similar diagnostics. The Unix builders now add compiler options, "-Wno-format-security" and/or "-Wno-format-nonliteral", to suppress these, where appropriate. (unix/configure) [SMS] _ Changed C macros USE_BZIP2, USE_DEFLATE64, USE_LZMA, USE_PPMD, and USE_UNSHRINK to BZIP2_SUPPORT, DEFLATE64_SUPPORT, LZMA_SUPPORT, PPMD_SUPPORT, and UNSHRINK_SUPPORT, respectively, for clarity and consistency with Zip. (INSTALL, explode.c, extract.c. fileio.c. funzip.c. gbloffs.c. globals.h. inflate.c, process.c, ubz2err.c, unzip.c, unzpriv.h, amiga/flate.a, human68k/flate.s, msdos/doscfg.h, msdos/makefile.dj2, msdos/makefile.wat, os2/os2cfg.h, unix/configure, vms/build_unzip.com, vms/descrip_src.mms, win32/Makefile, win32/Makefile.gcc, win32/Makefile.wat, wince/punzip.h) [SMS] - Changed the "special compilation options" section of the "-v" report to agree better with that of Zip. Added explanations for some more options. (unzip.c) [SMS] - Changed to use the new C macro, NO_TRADITIONAL_CRYPT, as in Zip, to control (disable) compilation of code specific to traditional encryption, allowing AES_WG encryption without traditional encryption. (crypt.c, crypt.h, fileio.c, unzip.c, unzpriv.h) [SMS] - Adopted a suggestion from Ireneusz Hallmann to use an alternate buffer in more situations in the DLL, to solve a problem with data corruption when inflating to memory. Adapted another suggestion for a better window size calculation. The old method gave poor results for buffer sizes which were not powers of two. (inflate,c) [IH, SMS] - Fixed many problems when building with REENTRANT defined, mostly in the new command-line option code, but also in ppmd_read_byte() and the user-triggered progress message. Reformed globals access in VMS-specific stamp_file(). (extract.c, unzip.c, unzpriv.h, zipinfo.c, vms/vms.c) [SMS] - Added "aesw" to the table of compression method names used in a ZipInfo report. ("u###" was appearing for method 99 in reports.) (zipinfo.c) [SMS] - Repaired lame punctuation in SFX "Must quote upper-case options" message on VMS. (unzip.c) [SMS] - Renamed C macro APL_DBL_SFX to APL_DBL_SUFX to reduce confusion with self-extracting "SFX". (extract.c, fileio.c, unix/macosx.h) [SMS] - Added some minimal/lame support in the unix/zipgrep script for (up to four) GNU long-form options for egrep, and fixed some lame error handling (when the "unzip -Z1" command failed, for example). Added "\" escapes for globbing characters ("*", "?", and "[") in archive member names. Many limitations and problems remain. (unix/zipgrep) [SMS] - Renamed "lzma" directory to "szip". (Contents, INSTALL, extract.c, globals.h, unzip.c, unix/configure, unix/Makefile, vms/build_unzip.com, vms/descrip_deps.mms, vms/descrip_mkdeps.mms, vms/descrip_src.mms) [SMS] - Changed Mac OS X system-specific code to use "/..namedfork/rsrc" as the suffix for resource fork access on Intel, staying with "/rsrc" on PowerPC. Define the C Macro APPLE_NFRSRC as 0 (on Intel) or 1 (on PowerPC) at build time to override the automatic decision. (We believe that all PowerPC-compatible OS versions accept "/rsrc", and all Intel-compatible OS versions accept "/..namedfork/rsrc".) Using "/rsrc" on Mac OS X 10.7 (Lion, Intel-only) caused spurious "Not a directory" messages, and resource forks were not properly restored. (unzip.c, unix/macosx.h) [SMS] - UnZip failed to extract an archive member with a null name (silently on VMS, with a mesage, "mapname: conversion of failed", on Unix). Spurious error messages like ": mismatching "local" filename (fred)" (where "fred" was some previously processed member name) were also possible. (Info-ZIP Zip uses "-" as the name for an archive member created from standard input, but the .ZIP standard allows a null name for this case.) Now, UnZip extracts a null-name archive member as "-" (C macro: NULL_NAME_REPL). On VMS, an error message was added, similar to the one on UNIX, and on UNIX, the message was clarified. (fileio.c, unzpriv.h, unix/unix.c, vms/vms.c) [SMS] - "unzip -t" silently detected an unexpected end-of-file condition when reading an archive, leading to an unexplained "At least one error was detected" message. An "Unexpected end-of-file" message has been added to reduce the mystery in this case. (extract.c) [SMS] - Java "jar" archives with over-simplified header info were interpreted as coming from MS-DOS, causing UTF-8-encoded file names to be damaged. A Java "CAFE" extra block is now detected, and inhibits this inappropriate name conversion. A new "--jar" option lets the user force this behavior when an archive lacks a "CAFE" extra block. http://sourceforge.net/p/infozip/support-requests/10/ (extract.c, fileio.c, unzip.c, unzip.h) [SMS] - Added Java "CAFE" extra field type to ZipInfo reports. (zipinfo.c) [SMS] - Changed some declarations to accommodate a type change in zlib version 1.2.7. (globals.h) [SMS] - UnZipSFX could fail (SEGV) on systems with backslash ("\") file path separators (MSDOS, Windows, ...), if a list of member names to be extracted was specified on the command line. (unzip.c) [SMS] - Added a #ifndef condition to avoid redefining the C macro HAVE_TERMIOS_H on Cygwin. (unix/unxcfg.h) [SMS] - Fixed assembler testing in configure script. Defining NO_ASM or NO_ASM_CRC in LOCAL_UNZIP disables use of assembly code for CRC. (unix/configure) [SMS] - Added Linux Exec Shield .section directive to assembly code, as in Zip. (crc_i386.S) [SMS] - Added a check in DLL unzip() for proper NULL termination of argv[]. (unzip.c) [SMS] - Revised VMS builders to make it easier to generate the help files (only). (vms/build_unzip.com, vms/descrip.mms) [SMS] - Changed to avoid conflict between a user definition of the C macro NO_EXCEPT_SIGNALS and an automatic one. (unzip.c) [SMS] - Disambiguated some option-related error messages. (unzip.c) [SMS] - Changed, on VMS, the way a "-d" (/DIRECTORY) destination directory is tested for validity. Previously, some VMS-invalid directory specifications (such as "." or "..") would generate no error, and then be (silently) ignored. - Reformed the multi-value C macro CRYPT into simpler (binary) IZ_CRYPT_ANY and IZ_CRYPT_TRAD. The actual encryption code should now use only IZ_CRYPT_AES_WG and IZ_CRYPT_TRAD (plus IZ_CRYPT_ANY, derived from them). At build time, users specify more controlled options: CRYPT_AES_WG, CRYPT_AES_WG_SFX, CRYPT_TRAD_SFX, NO_CRYPT, NO_CRYPT_TRAD. (crypt.c, crypt.h, ebcdic.h, extract.c, fileio.c, funzip.c, gbloffs.c, globals.h, INSTALL, ttyio.c, ttyio.h, unzip.c, unzpriv.h, amiga/filedate.c, qdos/qdos.c, windll/windll.c) [SMS] - Changed C macro USE_UNZIP_LIB$INITIALIZE to USE_UNZIP_LIB_INITIALIZE for consistency with Zip, where Sun C objected to the "$" in the corresponding code. (vms/vms.c) [SMS] - Changed some assembler-related details, including the test for an "_" prefix on global names. (unix/configure, unix/Makefile) [SMS] - Supposedly, the "-s" (--space_to_uscore) option became OS-generic in 6.10c01, but its implementation relies on OS-specific mapname() processing, and there was none on Unix or VMS. It may still be missing on other, more obscure systems. (unix/unix.c, vms/vms.c) [SMS] - Changed the archive file default file spec on VMS from "[]*.ZIP" to ".ZIP", to avoid undesired behavior in some unusual cases. (vms/vms.c) [SMS] - VMS-specific problem could cause "unzip -a" to truncate the last line in a text file if it lacked a normal line ending (like LF). (This problem was close to, but different from, the similar one which was fixed in version 6.10c01.) (vms/vms.c) [SMS] - The Unix builders detected a UID and/or GID bigger than 16 bits, but then defined the wrong C macro, disabling support for the new "ux" extra block. This could prevent UnZip (-X) from restoring UID and GID on files extracted from archives created by Zip 3.0 or later, where the new "ux" extra block was used. Never defining the right C macro also hid some defective code, which would cause a build failure if the right C macro was defined. Also, the "-v" report did not mention this option (IZ_HAVE_UXUIDGID). Forum topic: http://www.info-zip.org/phpBB3/viewtopic.php?f=3&t=402 (process.c, unzip.c, unix/configure) [SMS] - VMS CLI UnZip executables (UNZIP_CLI.EXE) were being built with a ZipInfo module (zipinfo.c) which was compiled for the Unix-style interface, not the VMS CLI interface. An obvious symptom was a Unix-style usage guide instead of a VMS CLI-style usage guide. (vms/build_unzip.com, vms/descrip.mms, vms/descrip_mkdeps.mms, vms/descrip_src.mms) [SMS] - With -c (--to-stdout, /SCREEN) or -p (--pipe-to-stdout, /PIPE), various progress messages ("Archive: xxx", "inflating: yyy", and so on) were sent to stdout along with the extracted data, and only -q (--quiet, /QUIET) could stop them. Now, with -c or -p, these messages should be sent to stderr, making them visible to the user without corrupting the extracted data stream. (fileio.c, unzpriv.h, vms/vms.c) [SMS] - Attempt to support Zip64 in fUnZip. Changed to skip directory members at the beginning of an archive, instead of doing nothing when the first archive member was a directory. Changed some messages and exit status codes. Still crude in many places. (funzip.c) [SMS] - With UNICODE_SUPPORT, UnZip could fail (SIGBUS, SIGSEGV, %SYSTEM-F-ACCVIO, ...) when processing a non-Unicode name which contained character codes above 127. More thought/work may be needed here. http://sourceforge.net/p/infozip/bugs/40/ (extract.c) [SMS] - Changed the DLL and object-library forms of the UnZip main entry point function not to look for "zipinfo" in argv[0]. To get ZipInfo mode, specify "-Z" in argv[1]. (unzip.c) [SMS] - Changed iconv code to use memset() instead of bzero(), for consistency and portability. Added a missing free(). Added ICONV_ARG2 macro to facilitate user addition of a "const" type qualifier to satisfy Sun C. Moved loose global storage into the general globals structure. Copied newer Unix code into BeOS. (beos/beocfg.h, beos/beos.c, globals.h, unix/unix.c, unix/unxcfg.h, unzip.c, unzpriv.h, zipinfo.c) [SMS] - -M (/MORE) used bad carriage control on VMS, adding spurious blank lines to the output. Changed the prompt function on VMS to use the same output file as the message function (stderr or stdout) to avoid this. (fileio.c, globals.h) [SMS] - Revised VMS DCL builder to recreate object libraries when not compiling (NOCOMPILE). (vms/build_unzip.com) [SMS] - Fixed some bad behavior (program aborts or loops, or faulty memory access) caused by (intentionally) defective/corrupt archives. Reported by OUSPG ("https://www.ee.oulu.fi/research/ouspg/"), CVE-2015-7696. Removed some harmless but redundant free() instances from extract.c. (crypt.c, crypt.h, extract.c, fileio.c, funzip.c, os2/os2.c, process.c, unzpriv.h, win32/win32.c, zipinfo.c) [Aki Helin, SMS] - memcpy() was being used in some cases on overlapping buffers, which could cause bad extracted data (and "bad CRC" errors) on some systems. Forum topic: http://www.info-zip.org/phpBB3/viewtopic.php?f=7&t=406 New code uses memcpy() only on disjoint buffers. New C macros replace old NOMEMCPY: Define C macro NO_SLIDE_MEMCPY to disable use of memcpy(). Define SLIDE_MEMMOVE to enable use of memmove() for a case where it works. Limited testing suggests that using memcpy() is faster, but using memmove() is not, so that's the default scheme, but we're open to evidence reports. (explode.c, inflate.c) [SMS] - Changed LLVM Clang compiler version identification to cope with v1.x, where __clang_major__ and friends were not defined. (unix/unix.c) [SMS] - Made the configuration test for lchmod() stricter, to detect a "not implemented" compiler warning message (Clang and GCC on GNU/Linux). (unix/configure) [SMS] - Changed the definitions of macros _ISO_INTERN and _OEM_INTERN on Unix to use function charset_to_intern() (now not static) directly, instead of using inline functions, iso_intern() and oem_intern() (now gone). HP-UX bundled C compiler (at least) does not support the keyword "inline". (beos/beocfg.h, beos/beos.c, unix/unix.c, unix/unxcfg.h, unzip.c) [SMS] - Added macro "Tracing", defined when macro "Trace" is non-empty, for use where Trace() was the only thing in the body of an "if" statement, and Clang complained, "if statement has empty body". (extract.c, unzpriv.h) [SMS] - Stopped some memory leaks, mostly related to the new command-line parser. Removed declarations and use of obsolete global name array, fnames[]. Removed the unused global pointer argument from free_args(). Removed redundant call to free_G_buffers() from process_zipfiles(). Track and free transient-use command-line option value storage. In free_G_buffers(), added calls to free() for the archive name and for retained command-line option values: extraction directory (-d) and password (-P). Changed API functions to use dynamic storage for the archive name (which may now be free()'d). (api.c, globals.c, process.c, unzip.c, unzpriv.h, zipinfo.c) [SMS] - In Unix builders, accept user-specified CFLAGS_OPT macro to override automatic compiler optimization options setting. For debugging, for example, one might specify "CFLAGS_OPT='-g -O0' LFLAGS2=-L.". (A non-null value is required for each. "-L." should be harmless for LFLAGS2.) Stopped putting redundant "-L." linker options into "flags". (unix/configure) [SMS] - Added some conditionality for SGI IRIX. (Knowing nothing, we assume that large-file support is still missing on SGI IRIX.) http://sourceforge.net/p/infozip/bugs/41/ (unzpriv.h) [SMS] - Disambiguated some Windows-specific error messages. (win32/win32.c) [SMS] - Minor code tidying (#directive rearangement, type casts) to pacify Microsoft Visual C++ 2010. (explode.c, extract.c, funzip.c, inflate.c, process.c, zipinfo.c) [SMS] - Added definition of HAVE_LOCALE_H to Windows-specific configuration file. (win32/w32cfg.h) [SMS] - Changed VMS builders to use explicit (CC) /NOLIST and (LINK) /NOMAP qualifiers by default, to reduce unexpected clutter in batch mode. (vms/build_unzip.com, vms/descrip_src.mms) [SMS] - Changed APIhelp() interface to deal with the new command-line parser. Converted tabs to spaces in text. Removed a BEL code from an error message. Added text for UzpMainI(). Added NULL termination to example argv[] arrays. Added apihelp.c to the Unix and VMS builders, primarily for testing. (It's normally disabled, unless API_DOC is defined.) (apihelp.c, unzip.c, unzpriv.h, unix/Makefile, vms/descrip.mms, vms/descrip_deps.mms, vms/descrip_mkdeps.mms, vms/descrip_src.mms) [SMS] - Fixed a problem where callable UnZip (or any build with the C macro REENTRANT defined) could try to free() the main-program argv[], instead of our local copy. (unzip.c, zipinfo.c) [SMS] - Removed a Unicode memory leak, and improved some sub-optimal code based on suggestions from Dmitry ??????. (fileio.c, process.c, win32/win32.c) [Dmitry, SMS] - On non-VMS systems, an I/O error while extracting a file (disk full, or similar) caused an interactive query ("write error (disk full?). Continue? (y/n/^C)"), even if there was no interactive user, causing the program to hang. Now, by default, such an I/O error is fatal. To restore the query, define the C macro I_O_ERROR_QUERY at build time, but the query code now checks stdin using isatty(), and skips the query if stdin is not a terminal. (fileio.c, unzpriv.h) [Dmitry, SMS] - On Windows, some defective bit-mask tests could cause failure to set directory attributes. (win32/win32.c) [Dmitry, SMS] - Memory leaks in Unicode name handling. (extract.c, fileio.c, process.c, unzip.c) [Dmitry, SMS] - On Windows, Unicode-capable code to set a volume label could fail. (win32/win32.c) [Dmitry, SMS] - In "-vl" (/LIST /FULL) reports, an unexpectedly large compression method value (>999) caused a (mostly harmless) buffer overflow, and spoiled the report format. Now, values less than 1000 are displayed as before, using a three-digit decimal format, "Unk:ddd", but larger values are displayed using a four-digit hexadecimal format, "UnkXXXX". http://sourceforge.net/p/infozip/bugs/27/ (list.c) [SMS] - In ZipInfo reports, an unexpectedly large "version made by" value (>99) caused a (mostly harmless) buffer overflow, and could spoil the report format. Now, for system types where space always allows, large values should always be displayed properly. For VMS, a more careful calculation is done to determine space requirements, and large values should be displayed properly when space allows. Forum topics: http://www.info-zip.org/phpBB3/viewtopic.php?f=7&t=267 http://www.info-zip.org/phpBB3/viewtopic.php?f=7&t=437 CVE-2014-9913. (zipinfo.c) [quanww, sanvila, SMS] - Added some crude, optional, dynamic memory tracing diagnostic capability for use by developers. (api.c, crypt.c, envargs.c, extract.c, fileio.c, funzip.c, globals.c, inflate.c, match.c, memdiag.c, process.c, timezone.c, unshrink.c, unzip.c, unzpriv.h, unix/unix.c, win32/win32.c) [SMS] - On Windows, with Unicode support, a buffer overrun in pathname storage could cause a variety of problems, including spurious error messages and program failure. That problem should be solved. Some buffers were allocated with a few bytes more than necessary. Some code which was needed only for developer diagnostic tracing was being compiled and executed always. A reform making the global array unipath_widefilename fixed instead of dynamic can be reversed by defining the C macro DYNAMIC_WIDE_NAME. (extract.c, fileio.c, globals.h, memdiag.c, process.c, unzip.c, win32/w32cfg.h, win32/win32.c) [SMS] - Changed behavior involving files which appear to have VMS version numbers (names ending with ";ddd", where "ddd" is a decimal number), and option "-V" (--keep-versions, /[NO]VERSION). Previously, UnZip would, by default, strip these apparent VMS version numbers when extracting files, and the "-V" option was required to prevent this, even when the file was not archived on a VMS system. Thus, a Unix file named "fred;123" would normally be extracted as "fred", unless "-V" was specified to prevent this damage. Now, on non-VMS systems, UnZip should strip apparent VMS version numbers only from files which were archived on a VMS system. Specify "-V" explicitly to keep version numbers even on VMS-archived files. Specify "-V-" explicitly to strip apparent VMS version numbers from all files regadless of where they were archived (the old default behavior). Behavior on VMS systems is unchanged. (acorn/acorn.c, amiga/amiga.c, aosvs/aosvs.c, atari/atari.c, atheos/atheos.c, beos/beos.c, extract.c, flexos/flexos.c, human68k/human68k.c, macos/source/macos.c, man/unzip.1, msdos/msdos.c, netware/netware.c, os2/os2.c, qdos/qdos.c, tandem/tanunz.c, unix/unix.c, unzip.c, vms/unzip_cli.help, vms/UNZIP_DEF.RNH, vms/vms.c, win32/win32.c) [SMS] - Bad white space in Unix builder caused problems in UID/GID size determination tests with old (K&R) compilers (SunOS 4.1.4 bundled, for example). (unix/configure) [SMS] - Bad white space caused build problems with old (K&R) compilers (SunOS 4.1.4 bundled, for example). (inflate.c) [SMS] - SunOS 4.1.4 bundled C compiler needed help with labs(). (fileio.c, funzip.c, unix/configure, unzpriv.h) [SMS] - Changed AES_WG endian-determination code not to look for <sys/isa_defs.h> on __sun systems with __sparc defined, because it's missing on SunOS 4.1.4. (aes_wg/brg_endian.h) [SMS] - Changed the VMS DCL test script to give SFX tests some chance of working on VMS versions before V6.0, where SET FILE /ATTRIBUTES is not available. Added an explanation to the VMS-specific installation instructions. (vms/INSTALL_VMS.txt, vms/test_unzip.com) [SMS] - Some conditional code conditions were misplaced, causing compiler warnings and/or bad behavior when some combinations of optional compression and/or encryption options were enabled in UnZip SFX. (extract.c) [SMS] - Added a Windows cmd test script, but the builders don't (yet?) run it automatically. Added code to set appropriate exit status values in the Unix and VMS test scripts. (unix/test_unzip.sh, vms/test_unzip.com, win32/test_unzip.cmd) [SMS] - Changed VMS exit status code to SS$_NORMAL for success instead of a facility-specific code (%x17A28001). This agrees with most VMS utilities, and with UnZip versions before 6.10a02. Define C macro OK_USE_FAC to use the facility code in all cases. (vms/vms.c) [SMS] - Removed Windows DLL global archive name storage (hwildZipFN) to fix a reentrancy problem reported by Alexandr Miloslavskiy. (This change is not well tested. Additional DLL wisdom is welcome.) (windll/windll.c) [SMS] - On Windows, conflicts with anti-virus programs could cause avoidable errors, "CreateFile() error 32 when trying set file time". ("32" is ERROR_SHARING_VIOLATION.) A similar problem when setting NT Security Descriptor data (-X) has not been reported, but seems similarly likely. Now, when CreateFile[AW]() fails for this reason, it is retried according to C macros IZ_CREATEFILE_xxx, defined in win32/w32cfg.h. Currently, a fixed time limit is used, which may be inadequate for large files. Users who still experience the problem are encouraged to report the circumstances. http://sourceforge.net/p/infozip/bugs/44/ (win32/nt.c, win32/w32cfg.h, win32/win32.c) [awaterson, Dmitry, SMS] - On Mac OS X, extended attributes (such as "com.apple.quarantine") were erroneously treated as more resource-fork data, so the extracted file did not get the proper attributes, and its resource fork was corrupted. These attributes should now be set correctly. Define the C macro NO_APPLE_XATTR at build time to disable the code to set extended attributes. (fileio.c, globals.h, process.c, unix/configure, unix/macosx.h) [SMS] - Moved definitions of multi-character option ID codes from individual main program modules to a common header file. (unzip.c, unzpriv.h, zipinfo.c) [SMS] - On Mac OS X, with "-d exdir", AppleDouble "._" file names were mishandled, causing Finder info and resource fork data to be lost. Some Mac-specific name handling code has been moved from the general extract.c:extract_or_test_entrylist() to a new OS-specific function, unix/unix.c:revert_apl_dbl_path(). (extract.c, fileio.c, globals.h, unzpriv.h, unix/unix.c) [SMS] - On Mac OS X, when archive member patterns were specified explicitly, including with a -x/--exclude option, AppleDouble "._" file names were mishandled, causing Finder info and resource fork data to be lost, or otherwise mishandled. This happened because a normal name and the corresponding "._" name might not match the same patterns, so one of the two parts might be processed while the other was not. Now, when Mac attributes are being restored (no -J/--junk-attrs option, and the destination volume supports attributes), an AppleDouble "._" archive member should be processed if the corresponding normal archive member is. (extract.c) [SMS] - On Mac OS X, setting non-data-fork attributes/data on a file could give it a new modification time, even if the user requested that its archived modification time be restored. (unix/unix.c) [SMS] - On Mac OS X, with an Intel CPU, UnZip tried to access a resource fork using the old "/rsrc" suffix instead of the newer "/..namedfork/rsrc" suffix, and this failed. After some recent code restructuring, unzip.c was not including unix/macosx.h as needed, so the C macro APPLE_NFRSRC was not being defined properly. An undefined APPLE_NFRSRC should have been detected, but was not. (api.c, unzip.c) [SMS] - Windows DLL builders failed to deal with (optional) bzip2 compression. Now, a scheme like that used for UnZip proper is used for the DLL. (windll/vc10/unzip32_dll.sln, windll/vc10/libbz2/libbz2.vcxproj, windll/vc10/libbz2/libbz2.vcxproj.filters) [SMS] - Added or updated copyright and license information in various files. (unix/configure, unix/configure_old, unix/Makefile, unix/Makefile_old, unix/mlz.sh, unix/test_unzip.sh, unix/zipgrep, vms/build_unzip.com, vms/collect_deps.com, vms/cppcld.com, vms/cvthelp.tpu, vms/descrip.mms, vms/descrip_mkdeps.mms, vms/descrip_src.mms, vms/find_bzip2_lib.com, vms/hlp_lib_next.com, vms/makesfx.com, vms/mod_dep.com, vms/optgen.com, vms/test_unzip.com, vms/unzip_cli.help, vms/UNZIP_DEF.RNH, vms/UNZIP_MSG.MSG, vms/unz_cli.cld, win32/test_unzip.cmd) [SMS] - "unzip --zipinfo-mode[...]" should have been equivalent to "unzip -Z [...]", but the long option was not handled properly, causing a spurious fatal error (message: "error: -Z must be first option for ZipInfo mode (check UNZIP variable?)", followed by two (!) Usage guides). (unzip.c) [SMS] - Cleared a compiler complaint (unused variable: p) when building the Windows DLL, or an object library without ZipInfo mode. (unzip.c) [SMS] - Cleared a Microsoft (VC12) compiler complaint (type mismatch). (zipinfo.c) [SMS] - Removed a redundant declaration (Zipnfo). (process.c) [SMS] - Updated copyright messages, and corrected a typo ("Built-n"). (unzip.c) [SMS] - Code tidying (comments, #directive indentation, #include path simplification). (windll/structs.h, windll/uzexampl.c, windll/windll.c, windll/vc10/unzip32_dll/unzip32_dll.vcxproj, windll/vc10/uzexampl/uzexampl.vcxproj) [SMS] - Simplified handling of C macros UNIXBACKUP and NO_UNIXBACKUP. (unzip.h, unzpriv.h) [SMS] - On Unix, "-d exdir" was limited to creating a maximum of one directory. So, for example, "-d fred1/fred2" would fail if the directory fred1 did not already exist. (unix/unix.c) [SMS] - On VMS, a long archive path (resulting in a directory specification longer than 255 characters) could be truncated, even on an ODS5 destination file system, where such a path was valid. (vms/vms.c) [SMS] - Tidied code based on Cppcheck analysis, GCC _FORTIFY_SOURCE=2, LLVM Clang, and some inspection (buffer overflow, syntax error in disused code, unused variable/value, memory management, bad error handling, bad I/O formats, and so on). (apihelp.c, crypt.c, extract.c, fileio.c, funzip.c, process.c, timezone.c, ttyio.c, unzip.c, zipinfo.c, amiga/amiga.c, aosvs/aosvs.c, beos/beos.c, macos/source/macbin3.c, macos/source/macdir.c, macos/source/macos.c, macos/source/pathname.c, qdos/callstub.c, qdos/makesfx.c, tandem/tandem.c, tandem/tanunz.c, theos/_setargv.c, theos/theos.c, unix/unix.c, vms/cmdline.c, vms/vms.c, windll/unzipstb.c) [Dmitry, SMS]. - Unrealistic size data in an archive could cause a buffer overflow when reporting the resulting unrealistic compression ratio in a long listing (-lv) report. Forum topic: http://www.info-zip.org/phpBB3/viewtopic.php?f=7&t=432 (list.c) [SMS] - A user response longer than eight characters to an interactive query (like, say, "replace XXX? [y]es, [n]o, [A]ll, [N]one, [r]ename: ") could be only partially consumed, leaving excess characters to be read by a later interactive query, without any additional user response. Now, a whole line should be read, even if only the first character is significant. (extract.c, fileio.c, process.c, unzpriv.h, vms/vms.c) [SMS] - Changes to accommodate old K&R-style C compilers: Changed some API function declarations/prototypes to remove prototypes where they are not supported. Changed the object-library example program to work when prototypes are not supported. Renamed some members of the _version_type structure to avoid conflicts with macros "major" and "minor" on SunOS 4.1.4. Added some type casts to clear some compiler complaints. Indented a "#error" directive. Added a missing ranlib command to the "make" rule for libizunzip.a on Unix. (api.c, apihelp.c, funzip.c, unzip.c, unzip.h, libiz/izunzip_example.c, unix/Makefile, windll/unzipstb.c, windll/uzexampl.c) [SMS] - Added the method descriptor ("creating", "extracting", "inflating", "testing", and so on) to the user progress message. (extract.c, globals.h, unzip.c, unzpriv.h, unix/unix.c, vms/vms.c) [SMS] - Restructured "man" documentation directories. Now, "man" source files (*.1) are supplied in a "man/man1/" directory, allowing direct use of a "man -M ./man" command in the kit directory. Formatted "man" output files (*.txt) are now supplied in a "docs/" directory. (INSTALL, README, unix/configure, unix/Makefile) [SMS] - On Unix systems, a temporary object library used during a build for some optional feature (for example, liblzma.a) could easily collide with an existing system-wide object library or shared object, and cause a link failure (undefined symbol, or similar). Now, these temporary object library names include a distinctive prefix, "iz_prvt_" which should be enough to avoid the problem. (unix/configure, unix/Makefile) [SMS] - The Unix builders now support use of the "make" macro PREFIX to specify a destination directory tree with the "install" target, and MANSUFX replaces MANEXT for modifying the names of the installed "man" files. The "install" target was trying build programs as well as just copying them, which was more than it knew how to do. Some obsolete, disfunctional, or experimental targets ("generic_XXX", "*shlib*") have been removed. The rules used to create the formatted manual (".txt") files now use "man -M", allowing them to work with non-GNU "man" programs. - Changed the name of the function zipinfo.c:zipinfo() to zipinform(), to clear a compiler complaint on z/OS (CCN3571, "The external name zipinfo must not conflict with the name in pragma csect or the csect name generated by the compiler."). (process.c, unzpriv.h, zipinfo.c) [SMS] - Removed some decisions involving "man" file names and "bin" and "man" installation directories from the unix/configure script, allowing unix/Makefile to follow explicit user instructions. ("If you don't think too good, don't think too much.") (unix/configure) [SMS] - Added a new variable/macro, COL, to the unix builders to accommodate SunOS 4.x, where /bin/col does not support "-x", but /usr/5bin/col does. (unix/configure, unix/Makefile) [SMS] 6.10c09 (13 May 2014): - Changed LIBUNZIP macro in the Unix builders to a more versatile BINS=[L][M][U] scheme. (unix/configure, unix/Makefile) [SMS] - If memory allocation failed in the unmatched-name detection code for file list and -x/--exclude (/EXCLUDE) list names, no notice was given, and unmatched names were not reported. Now, less memory is used (char, instead of int arrays), and such (unlikely) failures are fatal. (extract.c) [SMS] 6.10c10 (18 Aug 2014): - Reconciled common encryption code with Zip. (crypt.c, crypt.h) [SMS] - Added a dummy/comment C macro, x_SYMLINKS, to the Windows vc10 builder for UnZipSFX (like the existing one in the UnZip builder). (win32/vc10/unzipsfx/unzipsfx.vcxproj) [SMS] - Support single-source z/OS MVS builds. (zos/bbunzip.c, zos/build.jcl) [AD] - Add z/OS MVS executable and source ship builds. (zos/xmit.jcl, zos/zipsrc.jcl) [AD] - Correct ar -X option placement. (unix/configure) [AD] - IBM XL C builds with ICONV=1 to support utf-8 via iconv(). (unix/configure) [AD] - Unix builder script was ignoring some early test results when running later tests, causing erroneous configuration related to wide characters and Unicode. (unix/configure) [EG, SMS] 6.10c11 (03 Nov 2014): - Windows DLL interface/entry functions Wiz_SingleEntryUnzip() and Wiz_UnzipToMemory() were not setting the global flag has_win32_wide, causing problems with Unicode/wide file/member names. (windll/windll.c) [Andreas Schniertshauer, SMS] - Work around MS compiler quirk which caused bad behavior in the Windows DLL. Forum topic: http://www.info-zip.org/phpBB3/viewtopic.php?f=4&t=447 (windll/windll.c) [JBCarpen, SMS] - ZipInfo displayed wrong data for MD5 extra block (ID = 0x4b46). (zipinfo.c) [Wojtek Michalski] - A corrupt (or crafted) archive could cause memory access problems. Forum topic: http://www.info-zip.org/phpBB3/viewtopic.php?f=7&t=450 CVE-2014-9636. (extract.c) [Michal Zalewski, SMS] 6.10c12 (11 Nov 2014): - No news. 6.10c13 (26 Dec 2014): - Fixed some buffer-overflow problems reported by oCERT (oCERT.org), involving corrupt/malicious archives. CVE-2014-8139, CVE-2014-8140, and CVE-2014-8141. Added some warning messages where corruption was detected. (extract.c, fileio.c, process.c) [SMS] - Unix builder was using the wrong linker flags variable names, which could cause user-specified values to be ignored. (unix/Makefile) [SMS] - VMS MMS/MMK builder used some DCL symbols which could be (mis-)interpreted as MMS macros, causing various build problems. These now have names ending in "_dcl_sym", which sould avoid such collisions. (vms/descrip_src.mms) [SMS] - UnZip could erroneously report "bad AES_WG MAC" for valid data (when AES_WG encryption was used). (extract.c) [SMS] - Code tidying. Moved a VMS-specific variable (terminal echo state) from local static storage into the (dynamic) global data structure. (globals.c, globals.h, ttyio.c) [SMS] 6.10c14 (03 Jan 2015): - Removed the erroneous "fix" made to unix/Makefile in 6.10c13. Fixed an actual error in a comment. Added '"$(PROD)"/*.dSYM' to the list of files removed by the "clean" target (for Mac OS X). (unix/Makefile) [SMS] - Minor code changes to clear some compiler complaints. (extract.c) [SMS] - Limited to VMS a change intended to fix a message format problem on VMS. It was enabled everywhere, but could cause spurious blank lines on non-VMS systems. (fileio.c) [SMS] _ Added more details to documentation on build customization. (INSTALL) [SMS] - Advanced copyright dates in messages to 2015. (unzip.c) [SMS] 6.10c15 (10 Jan 2015) - Spelling changes. (COPYING.OLD, tandem/README) [SMS] - Removed some dead code. (unzip.c) [SMS] 6.10c16 (18 Mar 2015) - VMS MMS/MMK builder problems: - Faulty CLEAN_TEST rule could cause failure to remove all test files/directories. - Missing dependency caused failure to rebuild UNZIP_CLI.EXE when UNZIP.OLB changed. (vms/descrip.mms) [SMS] - Re-fixed a bad "fix" from 6.10c13 for one of the buffer-overflow problems reported by oCERT (oCERT.org), CVE-2014-8139. Symptom was a spurious error message like, "bad extra-field entry: EF block length (0 bytes) invalid (< 4)". Forum topic: http://www.info-zip.org/phpBB3/viewtopic.php?f=7&t=454 (extract.c, unzpriv.h) [SMS] - Fixed a buffer-overflow problem reported by William Robinet, in ICONV_MAPPING character-set conversion on BeOS and Unix systems. CVE-2015-1315. (beos/beos.c, unix/unix.c) [William Robinet, SMS] - Fixed a buffer-overflow problem reported by William Robinet, in listings ("unzip -l[l]") with unrealistic compression ratios. Also, the overflow occurred even in short-format (-l) listings although the string involved was actually used only in long-format (-ll) listings. (list.c, unzpriv.h, zipinfo.c) [William Robinet, SMS] - ZipInfo mode (-Z) did not allow diagnostic/info options: --license, -so/--show_options, --version, and some program identification information was obsolete. (unzip.c, unzpriv.h, vms/cmdline.c, zipinfo.c) [SMS] - Changed behavior on non-VMS systems for the "rename" option in interactive file-system conflict resolution queries ("replace XXX ? [y]es, [n]o, [A]ll, [N]one, [r]ename:"). Previously, the "-d exdir" extraction directory could be added to a user-specified file-system path which was a relative path (but not to an absolute path). This was confusing, because the path name shown in the query already included this directory, so a reasonable copy+paste operation could result in the extraction directory being added a second time. Now, the "-d exdir" extraction directory is added to an archive path (when it is transformed to a file-system path), and not to a path which is already a file-system path (like a "rename" path). Define the C macro EXDIR_RENAME to restore the old behavior. Not yet changed on obsolete systems, pending user requests (and testing on popular systems). Added a space before the "?" in the query message to help with copy+paste activity. (atari/ataricfg.h (new), beos/beocfg.h, beos/beos.c, unix/unxcfg.h, unix/unix.c, unzip.c, unzpriv.h, win32/win32.c, win32/w32cfg.h) [SMS] - Changed behavior on Windows systems with Unicode support enabled (NO_UNICODE_SUPPORT not defined). Previously, action messages ("extracting:", "inflating:", and so on) showed the archive member path/name, not the destination file-system path/name, as was done when Unicode support was disabled (or on non-Windows systems). Similarly, the wrong name could be shown in interactive file-system conflict resolution queries, as described above. Some related code reorganization changed some variable names in non-Windows-specific modules. (consts.h, extract.c, globals.h, unix/unix.c, unzip.c, unzpriv.h, vms/vms.c) [SMS] 6.10c17 (18 Mar 2015) - Added a type cast to clear a compiler complaint. (fileio.c) [SMS] - Changed an archive size variable type from z_uint4 to zoff_t for better agreement with run-time seek/tell functions. (globals.h) [SMS] 6.10c18 (18 Mar 2015) - Repaired damage to REENTRANT-sensitive code (such as the Windows DLL) beginning in version 6.10c16. (extract.c, fileio.c, process.c) [SMS] - Missing initialization of some variables related to segmented archives could cause spurious error messages: "error: Unexpected end-of-file reading XXX.zip." (globals.c, unzpriv.h) [Petr Stodulka, SMS] 6.1c19 (26 Jun 2015) - Repaired damage to AppleDouble extraction in the non-stream case, beginning in 6.10c16. (extract.c) [SMS] - The "files tested" count in the error-summary trailer could be wrong for a streamed archive, when a list of archive members was specified. (extract.c) [SMS] - Removed the now-spurious warning, "zipfile claims to be last disk of a multi-part archive [...]". Improved handling of segmented archives where the segment size varied. (fileio.c, globals.h, process.c) [Petr Stodulka, SMS] 6.1c20 (16 Mar 2016) - One more bug in handling of segmented archives. (fileio.c) [Petr Stodulka, SMS] - Incompatible declarations of function and prototype for set_zipfn_sgmnt_name(). (fileio.c) [SMS] - Since version 6.10b03, if the "external file attributes" for an archive member was zero, typically when the archive was created from a FAT file system (or similar, so, lacking UNIX-like permissions), and then the archive member was extracted on a VMS system, the resulting file and directory permissions could be defective. (vms/vms.c) [SMS] - The zipgrep shell script was erroneously adding backslash escapes to pattern strings, making some legitimate egrep patterns behave like simple grep patterns. The zipgrep "usage" text now reminds the user (and the developer) that it uses egrep. (unix/zipgrep) [SMS] - UnZip gave unhelpful error messages when trying to process archive members with AES_WG encryption and an unsupported compression method (for example, JPEG or WavPack). Now, if AES_WG encryption is not supported, then the "skipping" action message should complain about "AES_WG_encr". If AES_WG encryption _is_ supported, then the "skipping" action message should complain about the actual unsupported compression method. (AES_WG encryption is denoted by a fake "compression method" of 99, and the actual compression method is stored in an AES_WG extra block. In some cases, the AES_WG "99" value was being used instead of the actual value from the extra block.) (extract.c) [Elvis Angelaccio, SMS] - Revised some "UT"-related comments. (process.c) [SMS] 6.1c21 (12 May 2017): - Changed the Windows DLL UnZip-like example program to send its example-specific messages to stderr instead of stdout. This allows the ZipInfo test in the Windows test command script (win32/test_unzip.cmd) to pass. (windll/unzipstb.c) [SMS] - Extended the crude, optional, dynamic memory tracing diagnostic capability for use by developers to some VMS-specific modules. (vms/cmdline.c, vms/vms.c) [SMS] - The -da/--auto-extract-dir (/[NO]AUTO_DIRECTORY) option, to create a destination directory based on the archive name, was truncating the archive name at the leftmost dot, not the rightmost dot, leading to a truncated directory name if the archive name included multiple dots. (fileio.c) [SMS] - Updated the LICENSE notice in source files to "version 2009-Jan-02". Updated the copyright date in the LICENSE file itself. (apihelp.c, consts.h, crc32.c, crc32.h, ebcdic.h, envargs.c, explode.c, gbloffs.c, globals.c, inflate.h, LICENSE, timezone.c, timezone.h, ubz2err.c, unreduce.c, unshrink.c, zip.h, acorn/riscos.c, acorn/riscos.h, acorn/swiven.c, acorn/swiven.h, amiga/amiga.h, amiga/crc_68.a, amiga/filedate.c, amiga/flate.a, amiga/makesfx.c, amiga/stat.c, amiga/z-stat.h, aosvs/aosvs.h, atheos/athcfg.h, atheos/atheos.h, beos/beos.h, beos/beosmain.cpp, flexos/flxcfg.h, human68k/crc_68.s, human68k/flate.s, macos/README.TXT, macos/UnZp.h, macos/UnZpLib.h, macos/UnZpSFX.h, macos/UnZpSx.h, macos/source/charmap.h, macos/source/getenv.c, macos/source/helpers.c, macos/source/helpers.h, macos/source/maccfg.h, macos/source/macdir.c, macos/source/macdir.h, macos/source/macscreen.c, macos/source/macstat.c, macos/source/macstat.h, macos/source/macstuff.h, macos/source/mactime.c, macos/source/mactime.h, macos/source/macunzip.c, macos/source/pathname.c, macos/source/pathname.h, macos/source/sxunzip.c, msdos/crc_i86.asm, msdos/doscfg.h, netware/nlmcfg.h, os2/os2acl.c, os2/os2acl.h, os2/os2cfg.h, os2/os2data.h, os2/rexxapi.c, os2/rexxhelp.c, qdos/callstub.c, qdos/config.S, qdos/crc68.s, qdos/izqdos.h, qdos/makesfx.c, tandem/tandem.c, tandem/tandem.h, tandem/tannsk.h, theos/charconv.h, theos/oldstat.h, theos/stat.h, theos/theos.c, theos/thscfg.h, theos/_fprintf.c, theos/_isatty.c, theos/_setargv.c, theos/_sprintf.c, theos/_stat.c, tops20/tops20.c, unix/macosx.h, vms/vmsdefs.h, win32/crc_i386.asm, win32/crc_i386.c, win32/crc_lcc.asm, win32/rsxntwin.h, wince/intrface.h, wince/punzip.h, wince/punzip.rcv, wince/wince.cpp, wince/winmain.cpp, wince/winmain.h, windll/decs.h, windll/windll.h, windll/guisfx/dialog.h, zos/vmmvs.c, zos/vmmvs.h, zvm/vmstat.h) [EG, SMS] - The new command-line parser was not properly handling a double hyphen ("--") token, which should stop option interpretation. When that was changed, some loose global variables were moved into the main globals structure. Forum topic: http://www.info-zip.org/phpBB3/viewtopic.php?f=7&t=526 (globals.c, globals.h, unzip.c, zipinfo.c) [SMS] - In the VMS CLI UnZip program (UNZIP_CLI.EXE) in /ZIPINFO mode, the /LICENSE qualifier was not recognized. (vms/cmdline.c, vms/unz_cli.cld) [SMS] - Simplified handling of the different option lists for UnZip and ZipInfo modes. (unzip.c, unzpriv.h, zipinfo.c) [SMS] - Moved some global variables for user-progress messages into the main globals structure. (globals.c, globals.h, unzip.c) [SMS] - On Unix, file date-time values in a "UT" (0x5455) extra field block could be ignored if a modern "ux" (0x7875) UID/GID block followed it (which would be usual for an archive created bu Zip 3.x). The DOS (local) modification date-time (which is always present) would then used instead, but it has a two-second resolution and no timezone information. The result was a file modification date-time with an even number of seconds, even if the original value was odd, and unexpected hours/date caused by the loss of timezone information. (process.c) [Andries van Bergen, SMS] - In ZipInfo ("-Z", /ZIPINFO) short-format ("-s", /SHORT, default) reports, an unexpectedly large compression method value (>999) caused a (mostly harmless) buffer overflow, and spoiled the report format. Now, values less than 1000 are displayed as before, using a three-digit decimal format, "uDDD", but larger values are displayed using a four-digit (unlabled) hexadecimal format, "XXXX". https://launchpad.net/bugs/1643750 CVE-2016-9844. (zipinfo.c) [Alexis Vanden Eijnde, Tyler Hicks, SMS] - On VMS, a "%" character in an archive name, or in an archive member directory or file name, could cause spurious error/warning messages when a caret-escaped percent sign ("^%") was erroneously interpreted as a one-character wildcard. Typical messages included: (unzip -T name_with_^%_sign.zip): [ Modify file QIO failed. ] [ %SYSTEM-W-NOMOREFILES, no more files ] warning: cannot set time for: dev:[dir]name_with_^%_sign.zip;1 (extracting/creating a directory with a "%"): warning: set-dir-attributes failed ($qiow mod) for dev:[dir]x.DIR;1. [ %SYSTEM-W-NOMOREFILES, no more files ] warning: set times/attribs failed for dev:[dir] failed setting times/attribs for 1 dir entries (extracting a regular file with a "%"): [ Cannot create (QIO) output file dev:[dir]name_with^%_sign.txt ] [ %SYSTEM-W-BADFILENAME, bad file name syntax ] and so on. In a related problem, on VMS, match.c:iswild() ignored caret escapes, causing many non-wildcard names to be considered wildcard names. Also, since VMS V7.2 on non-VAX, "?" is a one-character wildcard, equivalent to "%", but was not treated as such. (Correcting this problem makes possible the first of the problems shown above.) For example: ($unzip -T name_with_^%_sign.zip) unzip: cannot find any matches for wildcard specification "name_with_^%_sign.zip". (match.c, vms/vms.c) [Jouk Jansen, SMS] - Added "ZCONST" to an argument declaration in action_msg() to clear a GCC compiler warning on AIX. (extract.c) [SMS] - Changed some archive data buffer types from "char" to "unsigned char". (extract.c, globals.c, globals.h, fileio.c, process.c, unzpriv.h) [SMS] - Added code to detect (and, for now, mostly ignore) a Central Directory Digital Signature. Previously, its presence could cause a spurious informational message: "note: didn't find end-of-central-dir signature at end of central dir." Now, it triggers an informational message saying that the digital signature data were detected but ignored. (consts.h, extract.c, globals.c, globals.h, list.c, process.c, unzpriv.h, zipinfo.c) [Jakub Martisko, SMS] - When processing a Zip64 (large-file) archive, "unzip -T" could generate a spurious informational message, "note: didn't find end-of-central-dir signature at end of central dir." Otherwise, the results seem to have been correct. (list.c) [SMS] - Added a Windows-specific "#pragma comment" directive for the bzip2 object library in the UnZip object library example program, solving a build failure on Windows. (libiz/izunzip_example.c) [SMS] - In the Unix builder, added "LANG=C" to the generation rules ("man", nroff) for the ".txt[r]" plain-text formatted "man" files. This prevents a Unicode locale at build time from affecting the results. (unix/Makefile) [SMS] - Changed a variable type, and added type casts to clear some (VS 2017) compiler warnings involving AES_WG encryption on x64 (using aes_wg/fileenc.c:fcrypt_init()). (api.c, crypt.c) [SMS] - Tidied Windows vc10 builders, mostly for x64, but some more generally. The bzip2 code (bzip2\compress.c) may trigger a harmless warning on x64. Made AES_WG support the default (C macro: CRYPT_AES_WG). (win32/vc10/funzip/funzip.vcxproj, win32/vc10/unzipsfx/unzipsfx.vcxproj, windll/vc10/unzip32_dll/unzip32_dll.vcxproj, winlib/vc10/winlib.sln, winlib/vc10/izunzip_example/izunzip_example.vcxproj, winlib/vc10/winlib/winlib.vcxproj) [SMS] - Build failed with an old C compiler (HP-UX PA-RISC bundled). In process.c:process_zipfiles(), an insufficiently primitve variable declaration. In unzip.c:UzpVersionStr(), a defective array declaration/initialization. (process.c, unzip.c) [SMS] - Sloppy code caused various run-time errors when built with an old C compiler (HP-UX PA-RISC bundled). Typical error messages included: "zipinfo: Streaming input archive not supported in ZipInfo mode." "End-of-central-directory signature not found." (fileio.c, process.c) [SMS] 6.1c22 (08 Jun 2017): - Removed the "NOT FOR GENERAL DISTRIBUTION" message from the program banner for public beta releases. New C macro: BETA_MSG. (unzip.c, unzpriv.h, unzvers.h, vms/cmdline.c) [SMS] - Removed definition of unused macro RELEASE. (unzvers.h) [SMS] - Invalid archive data could cause the bzip2 expander to loop. CVE-2015-7697. https://sourceforge.net/p/infozip/patches/23/ Minor code tidying to replace some raw integers with PK_xxx status values in the bzip2 expansion code. (extract.c) [Kamil Dudka, SMS] - Made some changes to reduce complaints from Parfait static analysis. https://sourceforge.net/p/infozip/patches/21/ - Added a NULL pointer check in process.c:wide_to_local_string(). - Extended a static buffer in zipinfo.c:zi_short() to avoid a buffer overflow with longer date-time strings. - Changed the flow in zipinfo.c:zipinform() to free some storage (fn_matched, xn_matched) before returning after an error. New macro: unzpriv.h:SKIP_ZI(). (process.c, unzpriv.h, zipinfo.c) [Jiri Kukacka, SMS] 6.1c23 (29 Nov 2017): - On Windows with Unicode support, for an archive whose paths used backslash ("\") directory separators, the backslashes were mishandled, resulting in extracted file paths/names like "dir_name" instead of "dir\name". Similar problems could have occurred with absolute paths in an archive. Both backslash directory separators and absolute paths violate the standard for zip archives, but they can be found in some archives. UnZip's policy is to treat backslash characters as slash characters ("/") for archive members which claim to originate on FAT (or similar) file systems, but this was failing in some cases on Windows with Unicode support enabled. Forum topic: http://www.info-zip.org/phpBB3/viewtopic.php?f=7&t=541 (extract.c) [SMS] - On Windows with Unicode support, some name storage could be reused inappropriately, resulting in a file with a Unicode name being extracted with a (wrong) name left over from some previously processed file. Forum topic: http://www.info-zip.org/phpBB3/viewtopic.php?f=7&t=541 (fileio.c) [SMS] - Some standard memory-allocation function names were still used instead of the private ones which support the crude, optional, dynamic memory tracing diagnostic capability for use by developers. (fileio.c, unzpriv.h, win32/win32.c) [SMS] - On Windows with Unicode support, memory leaked when creating a directory for extracted files. (win32/win32.c) [Andreas Schniertshauer, SMS] - On VMS, in -f/--freshen (/FRESHEN) mode, UnZip did not attempt to create nonexistent files, but it would erroneously create a directory stack which would lead to a nonexistent file. For example, in an empty directory (where there's nothing to freshen), when freshening "a/b/c.txt" UnZip would create "[.a.b]", and then not create "c.txt" in it. Now, as on other systems, when freshening, neither directories nor files are created when they do not already exist. (Exception: When overwriting, or creating a new version of, an existing file (interactive "[r]ename" option), the user-specified directories and file are always created.) (vms/vms.c) [SMS] - Long member names in an archive could cause buffer overflow in encryption password processing. (fileio.c) [R. Freingruber, SMS] - Long member names in an archive which require character-set conversion could cause buffer overflow in character-set conversion. (fileio.c) [R. Freingruber, SMS] - An archive name with no ".zip" suffix caused buffer overflow in split-archive segment name ("xxx.z01", ...) formation. (fileio.c) [R. Freingruber, SMS] - Invalid extra-field data (EF_STREAM, "xl" extra block) could cause buffer overflow. (extract.c) [R. Freingruber, SMS]