What's New: revision notes for Compression Plus 5.0. See WhatsOld.Txt for revision notes for Compression Plus 4.0. An asterisk next to a file version number indicates that the file has changed since the last update. ------------------------------------------------------- 07/30/2007 CP5DLL32.DLL 5, 0, 1, 30 Decryption Bug handling False Failed Passwords. ------------------------------------------------------- 07/3/2007 CP5DLL32.DLL 5, 0, 1, 29 Added support for GNU/TAR @LongLink Longfile name feature. ------------------------------------------------------- 07/30/2006 CP5DLL32.DLL 5, 0, 1, 28 SECURITY VUNERABILITY - ZOO Decompression Compression Plus ZOO processing could allow abitrary code execution. Credit to: Micheal Ligh, Greg Sinclair, and Amanda Wright for locating this and verifiying its fix. ------------------------------------------------------- 08/22/2004 CP5DLL32.DLL 5, 0, 1, 27 ET5IsPassword/ET5IsGoodPasword had a bad handle. ------------------------------------------------------- 07/29/2004 CP5DLL32.DLL 5, 0, 1, 26 ET5ZipOpen failing on a corrupt TAR file. ------------------------------------------------------- 07/09/2004 CP5DLL32.DLL 5, 0, 1, 25 ET5IsGoodPassword ET5IsPassword ET5QUnzip ET5QZip ET5ChangeDirPath Calling these functions while a Et5ZipOpen had a file open could step on the lpCP structure. Isolated the structure with a local copy to preserve previous state. ------------------------------------------------------- 04/02/2004 - SP11 CP5DLL32.DLL 5, 0, 1, 22 Fix on access denied was improperly failing on DIRs. ------------------------------------------------------- 04/02/2004 - SP10 CP5DLL32.DLL 5, 0, 1, 20 GP while Unshrinking LZH Method "1" files. Added RAR Identification code "ETCP_ARCHIVE_RAR" ------------------------------------------------------- 03/31/2004 - SP9 CP5DLL32.DLL 5, 0, 1, 19 LZH files were improperly failing the filename length check fix below. Misaligned LZH headers were failing Dir listing, Added Brute-Force record finder. ------------------------------------------------------- 03/21/2004 CP5DLL32.DLL 5, 0, 1, 17 Recurring 5.0.1.15 problem. Without a CPrint routine, an ACCESS DENIED was suppose to SKIP by default - it was erroring instead. It now properly SKIPs by default. ------------------------------------------------------- 03/04/2004 CP5DLL32.DLL 5, 0, 1, 16 If Filename and stored pathspec was legal (260 chars) but target path caused the pathname to exceed 260 during unzip, exceptio was thrown. ------------------------------------------------------- 12/02/2003 CP5DLL32.DLL 5, 0, 1, 15 Was not properly erroring on an ACCESS_DENIED while trying to ZIP a locked file. Now returns ACCESS_D thorugh the CPrint routine which allows user to skip, abort, or try again. Try Again is default action. After 3 failed retry attempts, the routine will abort. ------------------------------------------------------- 12/02/2003 CP5DLL32.DLL 5, 0, 1, 14 Was not properly Identifying ARC files. Adjusted code to better verify ARC prior to 6.0. 6.0 or higher will return UNKNOWN for time being. ------------------------------------------------------- 11/04/2003 CP5DLL32.DLL 5, 0, 1, 13 Et5UnZipPtr was improperly detecting MV zip file types. ------------------------------------------------------- 1/15/2003 CP5DLL32.DLL 5, 0, 1, 10 Fixed GP fault when reading corrupt tar/gz file headers. ------------------------------------------------------- 5:09 PM 7/27/2002 CP5DLL32.DLL 5, 0, 1, 2 Long File name retrievel problem. Filename length wasn't being calculated properly in all cases (LFN lengths > 127). ------------------------------------------------------- 6/17/02 CP5DLL32.DLL 5.0.1.01 BeCubed Release Changed the way Passwords were applied to the ZIP file for unzipping. Typically, the password was applied first to see if it was valid before proceeding. In very rare cases, valid passwords would fail this test, preventing access to the files. In order to work around this quirk, we now attempt to unzip the file against the password and check for a CRC error on the return. If a CRC error is returned we then test to see if the password might be incorrect. ------------------------------------------------------- 8/2/99 CP4DLL16.DLL 5.00.100 CP4DLL32.DLL 5.00.100 CP5DLL16.DLL 5.00.122 * CP5DLL32.DLL 5.00.122 * CP5OCX32.OCX 5.00.109 * CP5VBX16.VBX 5.00.105 * Corrected a problem in the VBX and OCX that resulted in European dates being displayed incorrectly. Corrected a problem in the 16-bit and 32-bit DLLs that prevented directories in some LZH files from being interpreted correctly. Added support for the -& (multivolume archive) switch to the Et5QZip function. Previously, there was no way to create a multi- volume archive from the QZip function. Et5QZip is the only function that will recognize this switch. The resulting multi-volume archive is ZIP compatible (equivalent to ETCP_ARCHIVE_ZIP_PKMV) and will, by default, use all available disk space on the target drive. This is equivalent to passing values of 0 (zeros) for the MultiFirst and MultiRest paraments of the Et5ZipCreateMV function. If adding or changing an archive comment by using the -.z switch, the comment length was limited to 127 bytes. The new limit is 2047 bytes (2048 including the terminating NULL). If you need to set an archive comment larger that 2047 bytes, use the Et5ZipNewComment function instead. Previously, the Et5UnzipPtr function would work only when extracting from ZIP files. In addition to ZIP files, it now supports all of the file formats that Compression Plus can extract from. ------------------------------------------------------- 3/15/99 CP4DLL16.DLL 5.00.100 CP4DLL32.DLL 5.00.100 CP5DLL16.DLL 5.00.121 CP5DLL32.DLL 5.00.121 CP5OCX32.OCX 5.00.108 * CP5VBX16.VBX 5.00.104 * Corrected a Y2K problem with the OCX's and VBX's .Date property. This was a formatting problem only. ------------------------------------------------------- 1/21/99 CP4DLL16.DLL 5.00.100 CP4DLL32.DLL 5.00.100 CP5DLL16.DLL 5.00.121 CP5DLL32.DLL 5.00.121 CP5OCX32.OCX 5.00.107 * CP5VBX16.VBX 5.00.103 Using the QUnZip and QZip properties of the ActiveX control, there was a parsing problem that resulted in long filenames, quoted filespecs, and parameter sequencing to be handled incorrectly .. sometimes. Also included in this release is an updated import library for our 32-bit DLL. The last release was built using VC6. Microsoft changed the file format for LIB files, making them incompatible with VC4. We located a little-known, seldom used linker switch that forces the resulting LIB files to use the old format (compatible with all versions of 32-bit C). PLEASE NOTE: The Et5ZipFix function's BRUTAL option is not currently implemented. Any attempt to use it will result in an INVALID_SWITCH error. This option will be implemented at a later date. The SIMPLE option is properly implemented. We also discovered a minor caveat when using the Et5SetPermutation function. This function is designed to scramble the structure of an zip archive's central directory records so it won't be recognized by other programs (WinZip, etc.) as a zip archive. If, however, you include another zip file within the archive you are permuting, other zip programs will be able to view the contents of the internal archive. In order to modify this behaviour, encrypt AND purmute at the same time (encrypt using the -s switch). This will scramble the contents of the archive (making internal zip files invisible) and scamble the central directory info (making the primary archive's contents invisible). ------------------------------------------------------- 12/08/98 The Et5ChangeDirPaths function was unable to match paths if the path within the archive contained lowercase letters. Fixed. Added a set of compatibility functions to make it easier to port from Compression Plus 3.0. Added a text file, CP3UPDAT.TXT, which contains information on which functions are no longer supported or which have changed since Compression Plus 3.0. ------------------------------------------------------- 10/07/98 Today's updates only affect C and C++ programmers. They involve repairs and improvements to the CP5.H include file, plus a pair of new sample programs. Fixed a problem with the CP5.H include file under 16-bit C, where we didn't define IMPEXP as nothing. Added a set of typedefs and constants to CP5.H to make it easier to load the Compression Plus DLLs at runtime (via LoadLibrary). Added a pair of 32-bit example programs for C, EtQZip and EtQUnZip. These are console apps that function much like the old PKZIP and PKUNZIP utilities, respectively. EtQZip shows how to call CP5DLL32.DLL by means of linking to the CP5DLL32.LIB import library, whereas EtQUnZip shows how to call CP5DLL32.DLL through runtime loading (using the LoadLibrary API call). ------------------------------------------------------- 09/28/98 CP4DLL16.DLL 5.00.100 CP4DLL32.DLL 5.00.100 CP5DLL16.DLL 5.00.120 * CP5DLL32.DLL 5.00.120 * CP5OCX32.OCX 5.00.106 CP5VBX16.VBX 5.00.103 The 32-bit version of the Et5ChangeDirPaths function didn't match the 16-bit version. We've lopped off the extra parameter in the 32-bit version and altered the CP5.H and CP5.PAS include files accordingly. (No changes were needed to other include files). Made both versions of the Et5ChangeDirPaths function a bit more robust. Paths may be specified with or without a trailing slash, and may use either slashes or backslashes as path delimiters, e.g. "\windows\foo" or "\windows\foo\" or "/windows/foo". Scanning has been made insensitive to case, to better support long filenames within archives. ------------------------------------------------------- 09/24/98 Added a brief example for Microsoft Visual FoxPro 6.0. ------------------------------------------------------- 09/22/98 CP4DLL16.DLL 5.00.100 CP4DLL32.DLL 5.00.100 CP5DLL16.DLL 5.00.119 * CP5DLL32.DLL 5.00.119 * CP5OCX32.OCX 5.00.106 * CP5VBX16.VBX 5.00.103 Fixed an error in the Et5IsBugPKMV function which could cause program termination due to a memory access violation. (The error itself was harmless, but Windows had no way of knowing that.) The Et5ReadCDR function formerly crashed if it was passed a NULL filename buffer. The filename buffer pointer can now be safely set to NULL if you aren't interested in retrieving the filename. Fixed a bug which could cause an archive to contain multiple files by the same name. This bug would be triggered only when adding to an existing archive, for files that exist both in the archive and on the same path as disk files being brought into the archive, if the size of the internal file list grew past about 16k, and if some other conditions were met. Recompiled CP5DLL32.DLL and CP5OCX32.OCX with Microsoft Visual C/C++ 6.0 (VC98). ------------------------------------------------------- 09/07/98 CP4DLL16.DLL 5.00.100 CP4DLL32.DLL 5.00.100 CP5DLL16.DLL 5.00.117 CP5DLL32.DLL 5.00.118 CP5OCX32.OCX 5.00.103 CP5VBX16.VBX 5.00.103 Updated the CP5.H include file to use the __declspec(dllimport) qualifier if a 32-bit Microsoft C compiler is detected. This allows the compiler to generate slightly more efficient calls to Compression Plus. ------------------------------------------------------- 09/03/98 CP4DLL16.DLL 5.00.100 CP4DLL32.DLL 5.00.100 CP5DLL16.DLL 5.00.117 * CP5DLL32.DLL 5.00.118 * CP5OCX32.OCX 5.00.103 CP5VBX16.VBX 5.00.103 Summary: Fixed bugs with unzipping, .Z archives, and DynaZip archives. Added some obsolete Compression Plus routines back in to help with legacy Visual Basic programs. Fixed a bug in the main unzip handlers which caused archives (except multi-volume formats) to be closed at the end of the unzip call. Depending on your program, the problems this caused might well not become immediately obvious, but the result could be erratic program behavior at or after the Et5ZipClose and/or Et5ShutDown routines were invoked. This problem appears to date back to the 06/01/98 update. Fixed an extremely rare bug in the uncompression handler which could cause a lock-up if the compressed data was corrupted in just the right fashion. (The same bug appears in PKUNZIP.EXE!) An internal progress check now causes the uncompressor to exit with an ETCP_ERR_BAD_CRC status instead. This bug could also possibly be triggered when uncompressing encrypted data, if the specified password was wrong but got by the password check. (Passwords are checked against a checksum when unzipping. The checksum screens out most invalid passwords, but not all. If an incorrect password got by the checksum test, the unzipper would try to unzip the file using the bad password, with the expected result of ETCP_ERR_BAD_CRC. But, since the data would be scrambled by decryption with the incorrect password, the result might trigger the uncompression bug instead.) Fixed a 32-bit problem with viewing and extracting from DynaZip multi-volume archives. Fixed a bug which caused the contents of .z archives to be reported as 13 bytes smaller than they actually were. (That's the Unix Compress format, which is actually for single files rather than archives, but we treat them like archives). Added progress events/callbacks for "unzipping" .z archives. Added the old EtFarAddr, LSeg, VarPtr, and VarSeg routines to the export lists. This is to improve compatibility with older versions of Compression Plus, for programmers using Visual Basic and other languages which have no "pointer" data types. Please be advised that many data items in Visual Basic are prone to moving around in memory, so the preferred technique is to set up custom Declares for the data types involved, rather than explicitly handling the memory locations with EtFarAddr, LSeg, VarPtr or VarSeg. See the Et5UnZipSt alias for Et5UnZipPtr to get an idea of how the custom Declares should be set up. ------------------------------------------------------- 08/10/98 CP4DLL16.DLL 5.00.100 CP4DLL32.DLL 5.00.100 CP5DLL16.DLL 5.00.113 * CP5DLL32.DLL 5.00.114 * CP5OCX32.OCX 5.00.103 CP5VBX16.VBX 5.00.103 Fixed a GPF problem with extracting from certain ARJ archives. ------------------------------------------------------- 07/01/98 CP4DLL16.DLL 5.00.100 CP4DLL32.DLL 5.00.100 CP5DLL16.DLL 5.00.112 CP5DLL32.DLL 5.00.112 CP5OCX32.OCX 5.00.103 CP5VBX16.VBX 5.00.103 Changes made in this update are applicable only to programmers using Borland's Delphi compiler. CP5.PAS has been updated and a brief sample of using the DLL in 32-bit Delphi has been added. Fixed a major error in the 32-bit Delphi declarations. Commented-out the Delphi declarations for the callbacks until we can figure out the syntax it wants to see. If you're a Delphi user, we'd welcome your assistance on this. ------------------------------------------------------- 06/22/98 CP4DLL16.DLL 5.00.100 CP4DLL32.DLL 5.00.100 CP5DLL16.DLL 5.00.112 CP5DLL32.DLL 5.00.112 CP5OCX32.OCX 5.00.103 CP5VBX16.VBX 5.00.103 Fixed an error in the Visual Basic declarations for Et5UnZipSt. This function was documented properly, but lacked a parameter in the VB include files. ------------------------------------------------------- 06/05/98 CP4DLL16.DLL 5.00.100 CP4DLL32.DLL 5.00.100 CP5DLL16.DLL 5.00.112 * CP5DLL32.DLL 5.00.112 * CP5OCX32.OCX 5.00.103 CP5VBX16.VBX 5.00.103 One of the multi-volume fixes from the 06/01/98 update caused the single-volume unzip handler to fail with an "access denied" error after the first file was extracted. Fixed. ------------------------------------------------------- 06/04/98 CP4DLL16.DLL 5.00.100 CP4DLL32.DLL 5.00.100 CP5DLL16.DLL 5.00.111 CP5DLL32.DLL 5.00.111 CP5OCX32.OCX 5.00.105 * CP5VBX16.VBX 5.00.103 Added an icon to the OCX. Corrected the size of the main bitmap. Changed the OCX name to "BeCubed Compression Plus Control" (from "CompPlus Control"). Besides being clearer, this distinguishes the control from the CPWCTL32.OCX used in Compression Plus 4.0. ------------------------------------------------------- 06/03/98 CP4DLL16.DLL 5.00.100 CP4DLL32.DLL 5.00.100 CP5DLL16.DLL 5.00.111 CP5DLL32.DLL 5.00.111 CP5OCX32.OCX 5.00.104 * CP5VBX16.VBX 5.00.103 The Action property of the OCX worked fine, but its value wasn't being updated. Fixed. The Comment property of the OCX wouldn't set a file comment. Fixed. ------------------------------------------------------- 06/01/98 CP4DLL16.DLL 5.00.100 CP4DLL32.DLL 5.00.100 CP5DLL16.DLL 5.00.111 * CP5DLL32.DLL 5.00.111 * CP5OCX32.OCX 5.00.103 CP5VBX16.VBX 5.00.103 Fixed a few small memory leaks and a resource leak which related to multi-volume archive handling. Fixed a problem in the "cancel" handler for extracting from multi-volume archives, which could result in crashes under NT4. Installed additional safeguards in various DLL routines to avoid the possibility of GPFs if null handle pointers were passed in. Please note that you can't change a "permutation" value if any archives are open. ------------------------------------------------------- 05/21/98 CP4DLL16.DLL 5.00.100 CP4DLL32.DLL 5.00.100 CP5DLL16.DLL 5.00.110 * CP5DLL32.DLL 5.00.110 * CP5OCX32.OCX 5.00.103 * CP5VBX16.VBX 5.00.103 Fixed a problem with regards to closing a temporary file when creating a multi-volume archive. This problem could cause a GPF under Windows 3.x, but did not appear to affect other operating systems. ------------------------------------------------------- 05/12/98 CP4DLL16.DLL 5.00.100 CP4DLL32.DLL 5.00.100 CP5DLL16.DLL 5.00.109 * CP5DLL32.DLL 5.00.109 * CP5OCX32.OCX 5.00.102 CP5VBX16.VBX 5.00.103 The manual and help files contained incorrect information about the kind of callback function that a Visual Basic program would use with Et5CPrintHookUnicode. Rather than: Public Sub CPrint (cpd As CPrintDataUnicode) You should use: Public Function CPrint (cpd As CPrintDataUnicode) As Integer Added the ETCP_MESSAGETYPE_ constants to the CP5-16.BAS and CP5.BAS "include" files for Visual Basic. There was an error in the Et5Zip handler which would tend to cause the returned status to be wrong if a problem turned up while creating a new single-volume .ZIP archive. This affected both 16-bit and 32-bit code. Fixed. ------------------------------------------------------- 04/24/98 CP4DLL16.DLL 5.00.100 CP4DLL32.DLL 5.00.100 CP5DLL16.DLL 5.00.108 * CP5DLL32.DLL 5.00.108 * CP5OCX32.OCX 5.00.102 CP5VBX16.VBX 5.00.103 Updated the help files. Fixed a problem with extracting uncompressed files from .ARC archives. This affected both 16-bit and 32-bit code. Added a work-around to the 16-bit code to avoid a bug in the Norton Utilities "protected trashcan". This bug causes the Windows API call, _lcreat, to fail under certain circumstances when a shared drive is being used under Windows 95 networking. ------------------------------------------------------- 04/07/98 CP4DLL16.DLL 5.00.100 CP4DLL32.DLL 5.00.100 CP5DLL16.DLL 5.00.107 * CP5DLL32.DLL 5.00.107 * CP5OCX32.OCX 5.00.102 * CP5VBX16.VBX 5.00.103 * The PK-compatible switch parser would return an "invalid switch" error if you gave it a switch string composed only of blank spaces. Fixed. The CP5DLL16.DLL version of Et5IsGoodPassword didn't screen out multi-volume archives, although this routine doesn't support such archives at this time. Fixed. The CP5DLL32.DLL version of Et5IsPassword didn't work with multi-volume archives. Fixed. Due to a combination of our bugs and a Microsoft C optimization quirk, the CP5VBX16.VBX control could write data into the wrong areas of memory. This might not have been apparent or might have shown up fairly often, depending on a variety of factors. Fixed. Fixed a potential self-registration problem with CP5OCX32.OCX. The CP5.H header file was incorrect for 16-bit C programs using memory models "medium" or smaller, as not all of the pointers were declared as FAR. Fixed. ------------------------------------------------------- 03/24/98 No changes to any DLL, VBX, or OCX. Fixed an error in the Visual Basic declarations for Et5ZipSt. This function was documented properly, but lacked a parameter in the VB include files. ------------------------------------------------------- 03/17/98 CP4DLL16.DLL 5.00.100 CP4DLL32.DLL 5.00.100 CP5DLL16.DLL 5.00.105 * CP5DLL32.DLL 5.00.105 * CP5OCX32.OCX 5.00.101 CP5VBX16.VBX 5.00.100 PK-format multi-volume archives were being created incorrectly, with improper signatures in the central directory entries. This has been fixed. To diagnose and repair this problem in existing PK multi-volume archives, use the new Et5IsBugPKMV and Et5FixBugPKMV functions. ' Sketch of how to check an archive. ' [call Et5Init, Et5SetCPrint, Et5ZipOpen] Status = Et5IsBugPKMV(lpCP, hZipFile, fBug) ' [call Et5ZipClose] If Status <> 0 Then [handle error] If fBug Then [bug is present] Else [archive is ok] ' [call Et5ShutDown] ' Sketch of how to repair an archive. ' [call Et5Init] Status = Et5FixBugPKMV(lpCP, szZipFileName) If Status <> 0 Then [handle error] ' [call Et5ShutDown] In the 32-bit version, paths were being stored incorrectly if you combined the old -.L long filename switch with the -P switch. Also, filenames could be truncated if you updated an archive that contained -.L long filenames. These problems have been fixed. (Note that -.L long filenames are automatically updated to -.LR long filenames when you update an archive.) ------------------------------------------------------- 03/05/98 CP4DLL16.DLL 5.00.100 CP4DLL32.DLL 5.00.100 CP5DLL16.DLL 5.00.103 * CP5DLL32.DLL 5.00.103 * CP5OCX32.OCX 5.00.101 CP5VBX16.VBX 5.00.100 CP5DLL updates: There was an error in handling ZIP archives that were tagged as being created on an alien operating system (e.g., Unix) but tagged as being targeted for DOS/Windows. In this case, Compression Plus would ignore the file attributes of files within the archive. Fixed. There are some ZIP archives, created by an unknown utility, that start with an invalid header record. For this reason, they weren't recognized as ZIP archives by Compression Plus. This is no longer a problem, as the archive identifier will now actually search an archive for the appropriate headers if necessary. Also, using Compression Plus to modify such archives will cause them to be rebuilt without the invalid header(s). ------------------------------------------------------- 02/12/98 CP4DLL16.DLL 5.00.100 CP4DLL32.DLL 5.00.100 CP5DLL16.DLL 5.00.102 * CP5DLL32.DLL 5.00.102 * CP5OCX32.OCX 5.00.101 * CP5VBX16.VBX 5.00.100 CP5DLL updates: Improved the uudecoder by adding support for another common method of encoding the original file size. This allows us to restore the original size of uudecoded files more often. ActiveX (OCX) updates: Some of the Compression Plus constants weren't defined in the control. This could be a problem if you didn't use the appropriate "include" file with your program. Fixed. The types for some of the new properties weren't entirely accurate. ArchiveType and MoreStatus have been updated from "long" to "short" integer. SkipFile and TextFile have been updated from "long" to "boolean". The new values for the Action property couldn't be used due to an error in the range checking. Fixed. The archive file wasn't closed properly if you updated the archive comment. Fixed. Some of the result property values weren't being updated properly. This affected the directory information properties in particular. Fixed. The guid values for the Compression Plus 5.0 control were the same as those for the Compression Plus 4.0 control, which could cause conflicts and confusion between the two. Fixed. However, you may need to check any of your existing projects which use CP5OCX32.OCX in order to make sure that they're really using this control, rather than having reverted to the CPWCTL32.OCX from Compression Plus 4.0. ------------------------------------------------------- 02/04/98 CP4DLL16.DLL 5.00.100 CP4DLL32.DLL 5.00.100 CP5DLL16.DLL 5.00.101 * CP5DLL32.DLL 5.00.101 * CP5OCX32.OCX 5.00.100 CP5VBX16.VBX 5.00.100 The 32-bit versions of Et5UUDecode and Et5UUEncode didn't work. Fixed. Working with an archive failed if the archive had a main comment which was longer than about 26 characters. Fixed. Viewing and extracting from ARJ archives failed if the archive contained a filename and attached comment which, when combined, were longer than the maximum valid filename length. Fixed. Attempting to open a non-ZIP archive would fail if the generic open mode (mode = 0) was used. Fixed. ------------------------------------------------------- 01/28/98 CP4DLL16.DLL 5.00.100 CP4DLL32.DLL 5.00.100 CP5DLL16.DLL 5.00.100 CP5DLL32.DLL 5.00.100 CP5OCX32.OCX 5.00.100 CP5VBX16.VBX 5.00.100 Initial release of Compression Plus 5.0. ----------------- end of document ------------------------------