From: <lab...@us...> - 2019-08-24 01:04:53
|
Revision: 1588 http://sourceforge.net/p/opengtoolkit/svn/1588 Author: labviewer Date: 2019-08-24 01:04:51 +0000 (Sat, 24 Aug 2019) Log Message: ----------- minor improvements trying to protect access to possible NULL pointers Modified Paths: -------------- trunk/lvzip/c_source/crypt.c trunk/lvzip/c_source/iomem.c trunk/lvzip/c_source/lvapi.c trunk/lvzip/c_source/lvapi.h trunk/lvzip/c_source/lvutil.c trunk/lvzip/c_source/zlib.rc Modified: trunk/lvzip/c_source/crypt.c =================================================================== --- trunk/lvzip/c_source/crypt.c 2019-08-24 00:36:58 UTC (rev 1587) +++ trunk/lvzip/c_source/crypt.c 2019-08-24 01:04:51 UTC (rev 1588) @@ -36,6 +36,7 @@ # include <stdio.h> # include <stdlib.h> # include <sys/stat.h> +# include <time.h> # include <fcntl.h> # include <unistd.h> # include <dlfcn.h> Modified: trunk/lvzip/c_source/iomem.c =================================================================== --- trunk/lvzip/c_source/iomem.c 2019-08-24 00:36:58 UTC (rev 1587) +++ trunk/lvzip/c_source/iomem.c 2019-08-24 01:04:51 UTC (rev 1588) @@ -89,7 +89,7 @@ memio->error = 0; if (opaque && !(mode & ZLIB_FILEFUNC_MODE_CREATE)) - memio->pos = LStrLen(*(LStrHandle)opaque); + memio->pos = LStrLenH((LStrHandle)opaque); } return memio; } @@ -115,8 +115,8 @@ if (mem->pos + size > 0x7FFFFFFF) size = (uint32_t)(0x7FFFFFFF - mem->pos); - if (mem->pos + size > (uint64_t)LStrLen(*(LStrHandle)opaque)) - size = (uint32_t)(LStrLen(*(LStrHandle)opaque) - mem->pos); + if (mem->pos + size > (uint64_t)LStrLenH((LStrHandle)opaque)) + size = (uint32_t)(LStrLenH((LStrHandle)opaque) - mem->pos); zmemcpy(buf, LStrBuf(*(LStrHandle)opaque) + mem->pos, size); mem->pos += size; @@ -206,9 +206,8 @@ start = mem->pos; break; case ZLIB_FILEFUNC_SEEK_END : - if (opaque) - start = LStrLen(*(LStrHandle)opaque); - /* no break */ + start = LStrLenH((LStrHandle)opaque); + /* no break */ case ZLIB_FILEFUNC_SEEK_SET : break; default: Modified: trunk/lvzip/c_source/lvapi.c =================================================================== --- trunk/lvzip/c_source/lvapi.c 2019-08-24 00:36:58 UTC (rev 1587) +++ trunk/lvzip/c_source/lvapi.c 2019-08-24 01:04:51 UTC (rev 1588) @@ -247,16 +247,19 @@ if (!err && comment) { int32 len = (int32)strlen(comment); - err = NumericArrayResize(uB, 1, (UHandle*)globalcomment, len); - if (!err) + if (len > 0) { - MoveBlock((ConstUPtr)comment, LStrBuf(**globalcomment), len); - LStrLen(**globalcomment) = len; + err = NumericArrayResize(uB, 1, (UHandle*)globalcomment, len); + if (!err) + { + MoveBlock((ConstUPtr)comment, LStrBuf(**globalcomment), len); + LStrLen(**globalcomment) = len; + } + else + { + lvzlibDisposeRefnum(refnum, NULL, ZipMagic); + } } - else - { - lvzlibDisposeRefnum(refnum, NULL, ZipMagic); - } } if (err) { @@ -319,13 +322,18 @@ LibAPI(MgErr) lvzlib_zipWriteInFileInZip(LVRefNum *refnum, const LStrHandle buffer) { - zipFile node; - MgErr err = lvzlibGetRefnum(refnum, &node, ZipMagic); - if (!err) + MgErr err = mgNoErr; + int32 len = LStrLenH(buffer); + if (len > 0) { - int retval = zipWriteInFileInZip(node, LStrBuf(*buffer), LStrLen(*buffer)); - if (retval < 0) - return LibToMgErr(retval); + zipFile node; + err = lvzlibGetRefnum(refnum, &node, ZipMagic); + if (!err) + { + int retval = zipWriteInFileInZip(node, LStrBuf(*buffer), len); + if (retval < 0) + return LibToMgErr(retval); + } } return err; } @@ -442,16 +450,22 @@ err = LibToMgErr(unzGetGlobalInfo(node, &pglobal_info)); if (!err) { - err = NumericArrayResize(uB, 1, (UHandle*)comment, pglobal_info.size_comment); - if (!err) + if (pglobal_info.size_comment) { - err = LibToMgErr(unzGetGlobalComment(node, (char*)LStrBuf(**comment), pglobal_info.size_comment)); + err = NumericArrayResize(uB, 1, (UHandle*)comment, pglobal_info.size_comment + 1); if (!err) { - LStrLen(**comment) = pglobal_info.size_comment; - *nEntry = pglobal_info.number_entry; + err = LibToMgErr(unzGetGlobalComment(node, (char*)LStrBuf(**comment), pglobal_info.size_comment + 1)); } } + if (*comment) + { + LStrLen(**comment) = pglobal_info.size_comment; + } + if (!err) + { + *nEntry = pglobal_info.number_entry; + } } } return err; @@ -467,21 +481,54 @@ err = LibToMgErr(unzGetGlobalInfo64(node, &pglobal_info)); if (!err) { - err = NumericArrayResize(uB, 1, (UHandle*)comment, pglobal_info.size_comment); - if (!err) + if (pglobal_info.size_comment) { - err = LibToMgErr(unzGetGlobalComment(node, (char*)LStrBuf(**comment), pglobal_info.size_comment)); + err = NumericArrayResize(uB, 1, (UHandle*)comment, pglobal_info.size_comment); if (!err) { - LStrLen(**comment) = pglobal_info.size_comment; - *nEntry = pglobal_info.number_entry; + err = LibToMgErr(unzGetGlobalComment(node, (char*)LStrBuf(**comment), pglobal_info.size_comment)); } } + if (*comment) + { + LStrLen(**comment) = pglobal_info.size_comment; + } + if (!err) + { + *nEntry = pglobal_info.number_entry; + } } } return err; } +static MgErr RetrieveFileInfo(unzFile node, unz_file_info *pfile_info, LStrHandle *fileName, uint16_t sizeFileName, LStrHandle *extraField, uint16_t sizeExtraField, LStrHandle *comment, uint16_t sizeComment) +{ + MgErr err = NumericArrayResize(uB, 1, (UHandle*)extraField, sizeExtraField + 1); + if (!err) + { + err = NumericArrayResize(uB, 1, (UHandle*)fileName, sizeFileName + 1); + if (!err) + { + err = NumericArrayResize(uB, 1, (UHandle*)comment, sizeComment + 1); + if (!err) + { + err = LibToMgErr(unzGetCurrentFileInfo(node, pfile_info, (char*)LStrBufH(*fileName), sizeFileName + 1, LStrBufH(*extraField), sizeExtraField + 1, (char*)LStrBufH(*comment), sizeComment + 1)); + if (!err) + { + if (*extraField) + LStrLen(**extraField) = sizeExtraField; + if (*fileName) + LStrLen(**fileName) = sizeFileName; + if (*comment) + LStrLen(**comment) = sizeComment; + } + } + } + } + return err; +} + /**************************************************************************************************** * * Position the current file pointer to the file with fileName @@ -557,25 +604,37 @@ return err; } -static MgErr RetrieveFileInfo(unzFile node, unz_file_info *pfile_info, LStrHandle *fileName, uint16_t sizeFileName, LStrHandle *extraField, uint16_t sizeExtraField, LStrHandle *comment, uint16_t sizeComment) +MgErr lvzlib_unzLocateFile2_64(LVRefNum *refnum, unz_file_info64 *pfile_info, LStrHandle *fileName, LStrHandle *extraField, LStrHandle *comment, int iCaseSensitivity) { - MgErr err = NumericArrayResize(uB, 1, (UHandle*)extraField, sizeExtraField); + unzFile node; + MgErr err = lvzlibGetRefnum(refnum, &node, UnzMagic); if (!err) { - err = NumericArrayResize(uB, 1, (UHandle*)fileName, sizeFileName); + err = ZeroTerminateLString(fileName); if (!err) { - err = NumericArrayResize(uB, 1, (UHandle*)comment, sizeComment); + unzFileNameComparer filename_compare_func = NULL; + if ( +#if Mac || MSWin || VxWorks + !iCaseSensitivity || +#endif + iCaseSensitivity == 2) + { + filename_compare_func = caseInsensitiveNameComparer; + } + else + { + filename_compare_func = caseSensitiveNameComparer; + } + err = LibToMgErr(unzLocateFile(node, (const char*)LStrBufH(*fileName), filename_compare_func)); if (!err) { - err = LibToMgErr(unzGetCurrentFileInfo(node, pfile_info, (char*)LStrBuf(**fileName), sizeFileName, LStrBuf(**extraField), sizeExtraField, (char*)LStrBuf(**comment), sizeComment)); + err = LibToMgErr(unzGetCurrentFileInfo64(node, pfile_info, NULL, 0, NULL, 0, NULL, 0)); if (!err) { - LStrLen(**extraField) = sizeExtraField; - LStrLen(**fileName) = sizeFileName; - LStrLen(**comment) = sizeComment; + err = RetrieveFileInfo(node, NULL, fileName, pfile_info->size_filename, extraField, pfile_info->size_file_extra, comment, pfile_info->size_file_comment); } - } + } } } return err; @@ -673,13 +732,15 @@ err = NumericArrayResize(uB, 1, (UHandle*)extra, len); if (!err) { - err = LibToMgErr(unzGetLocalExtrafield(node, LStrBuf(**extra), len)); - if (!err) - LStrLen(**extra) = len; + LStrLen(**extra) = unzGetLocalExtrafield(node, LStrBuf(**extra), len); } - return err; } - err = LibToMgErr(len); + else + { + err = LibToMgErr(len); + } + if (*extra) + LStrLen(**extra) = 0; } return err; } @@ -698,7 +759,7 @@ { unzFile node; MgErr err = lvzlibGetRefnum(refnum, &node, UnzMagic); - if (!err) + if (!err && buffer) { int retval = unzReadCurrentFile(node, LStrBuf(*buffer), LStrLen(*buffer)); if (retval < 0) Modified: trunk/lvzip/c_source/lvapi.h =================================================================== --- trunk/lvzip/c_source/lvapi.h 2019-08-24 00:36:58 UTC (rev 1587) +++ trunk/lvzip/c_source/lvapi.h 2019-08-24 01:04:51 UTC (rev 1588) @@ -52,6 +52,7 @@ LibAPI(MgErr) lvzlib_unzGetGlobalInfo32(LVRefNum *refnum, LStrHandle *comment, uInt32 *nEntry); LibAPI(MgErr) lvzlib_unzGetGlobalInfo64(LVRefNum *refnum, LStrHandle *comment, uInt64 *nEntry); LibAPI(MgErr) lvzlib_unzLocateFile(LVRefNum *refnum, LStrHandle fileName, int iCaseSensitivity); +LibAPI(MgErr) lvzlib_unzLocateFile2_64(LVRefNum *refnum, unz_file_info64 *pfile_info, LStrHandle *fileName, LStrHandle *extraField, LStrHandle *comment, int iCaseSensitivity); LibAPI(MgErr) lvzlib_unzGetCurrentFileInfo32(LVRefNum *refnum, unz_file_info *pfile_info, LStrHandle *fileName, LStrHandle *extraField, LStrHandle *comment); LibAPI(MgErr) lvzlib_unzGetCurrentFileInfo64(LVRefNum *refnum, unz_file_info64 *pfile_info, LStrHandle *fileName, LStrHandle *extraField, LStrHandle *comment); LibAPI(MgErr) lvzlib_unzOpenCurrentFile(LVRefNum *refnum, int32* method, int32* level, int16 raw, const char* password); Modified: trunk/lvzip/c_source/lvutil.c =================================================================== --- trunk/lvzip/c_source/lvutil.c 2019-08-24 00:36:58 UTC (rev 1587) +++ trunk/lvzip/c_source/lvutil.c 2019-08-24 01:04:51 UTC (rev 1588) @@ -1373,7 +1373,7 @@ { DEBUGPRINTF(("FSSetCatalogInfo: err = %ld", err)); } - else if (LStrLen(*comment) > 0) + else if (LStrLenH(comment) > 0) { /* Ignore error for getting Desktop comments */ ret = OSErrToLVErr(PBDTGetPath(&dtpb)); @@ -1629,7 +1629,7 @@ LStrHandle hfsPath = NULL; /* Convert the posix path to an HFS path */ err = ConvertFromPosixPath(str, len, CP_ACP, &hfsPath, CP_ACP, '?', NULL, isDir); - if (!err) + if (!err && hsfPath) { err = FTextToPath(LStrBuf(*hfsPath), LStrLen(*hfsPath), path); } @@ -2817,7 +2817,7 @@ LibAPI(MgErr) ConvertCString(ConstCStr src, int32 srclen, uInt32 srccp, LStrHandle *dest, uInt32 destcp, char defaultChar, LVBoolean *defUsed) { - MgErr err; + MgErr err = noErr; if (srccp != destcp) { UStrHandle ustr = NULL; @@ -2833,12 +2833,15 @@ { if (srclen == -1) srclen = StrLen(src); - err = NumericArrayResize(uB, 1, (UHandle*)dest, srclen); - if (!err) + if (srclen > 0) { - MoveBlock(src, LStrBuf(**dest), srclen); - LStrLen(**dest) = srclen; - return err; + err = NumericArrayResize(uB, 1, (UHandle*)dest, srclen); + if (!err) + { + MoveBlock(src, LStrBuf(**dest), srclen); + LStrLen(**dest) = srclen; + return err; + } } } if (*dest) @@ -2853,7 +2856,7 @@ #if usesWinPath Unused(isDir); err = ConvertCString(src, srclen, srccp, dest, destcp, defaultChar, defUsed); - if (!err) + if (!err && *dest) { int32 len = LStrLen(**dest); UPtr buf = LStrBuf(**dest); @@ -2979,7 +2982,7 @@ #if usesWinPath Unused(isDir); err = ConvertLString(src, srccp, dest, destcp, defaultChar, defUsed); - if (!err) + if (!err && *dest) { int32 len = LStrLen(**dest); UPtr buf = LStrBuf(**dest); @@ -3340,7 +3343,7 @@ LibAPI(MgErr) ZeroTerminateLString(LStrHandle *dest) { - int32 size = dest ? LStrLen(**dest) : 0; + int32 size = LStrLenH(*dest); MgErr err = NumericArrayResize(uB, 1, (UHandle*)dest, size + 1); if (!err) LStrBuf(**dest)[size] = 0; Modified: trunk/lvzip/c_source/zlib.rc =================================================================== --- trunk/lvzip/c_source/zlib.rc 2019-08-24 00:36:58 UTC (rev 1587) +++ trunk/lvzip/c_source/zlib.rc 2019-08-24 01:04:51 UTC (rev 1588) @@ -2,8 +2,8 @@ #define IDR_VERSION1 1 IDR_VERSION1 VERSIONINFO MOVEABLE IMPURE LOADONCALL DISCARDABLE - FILEVERSION 4,1,0 - PRODUCTVERSION 4,1,0 + FILEVERSION 4,2,0 + PRODUCTVERSION 4,2,0 FILEFLAGSMASK VS_FFI_FILEFLAGSMASK FILEFLAGS 0 FILEOS VOS_DOS_WINDOWS32 @@ -17,12 +17,12 @@ BEGIN VALUE "FileDescription", "LabVIEW zlib data compression library\0" - VALUE "FileVersion", "4.1.0.LV7\0" + VALUE "FileVersion", "4.2.0.LV7\0" VALUE "InternalName", "lvzlib\0" VALUE "OriginalFilename", "lvzlib.dll\0" VALUE "ProductName", "LVZLib.DLL\0" - VALUE "Comments","DLL support by Alessandro Iacopetti & Gilles Vollant\r\nZIP support by Gilles Vollant\r\nLabVIEW support by Rolf Kalbermatter\r\nBased on zlib 1.2.8 and minizip 1.1\0" - VALUE "LegalCopyright", "(C) 1995-2014 Jean-loup Gailly & Mark Adler\0" + VALUE "Comments","DLL support by Alessandro Iacopetti & Gilles Vollant\r\nZIP support by Gilles Vollant\r\nLabVIEW support by Rolf Kalbermatter\r\nBased on zlib 1.2.11 and minizip 1.2\0" + VALUE "LegalCopyright", "(C) 1995-2017 Jean-loup Gailly & Mark Adler\0" END END BLOCK "VarFileInfo" This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |