Hello community, here is the log from the commit of package unrar for openSUSE:Factory:NonFree checked in at 2020-01-30 09:29:38 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory:NonFree/unrar (Old) and /work/SRC/openSUSE:Factory:NonFree/.unrar.new.26092 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "unrar" Thu Jan 30 09:29:38 2020 rev:86 rq:768255 version:5.9.1 Changes: -------- --- /work/SRC/openSUSE:Factory:NonFree/unrar/unrar.changes 2019-12-13 12:00:53.269481219 +0100 +++ /work/SRC/openSUSE:Factory:NonFree/.unrar.new.26092/unrar.changes 2020-01-30 09:29:39.733113187 +0100 @@ -1,0 +2,6 @@ +Wed Jan 29 09:34:48 UTC 2020 - Ismail Dönmez <idon...@suse.com> + +- Update to version 5.9.1 + * Based on WinRAR version 5.90 beta1 + +------------------------------------------------------------------- Old: ---- unrarsrc-5.8.5.tar.gz New: ---- unrarsrc-5.9.1.tar.gz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ unrar.spec ++++++ --- /var/tmp/diff_new_pack.F8QHMK/_old 2020-01-30 09:29:40.349113516 +0100 +++ /var/tmp/diff_new_pack.F8QHMK/_new 2020-01-30 09:29:40.349113516 +0100 @@ -18,10 +18,10 @@ # majorversion should match the major version number. %define majorversion 5 -%define libsuffix 5_8_5 +%define libsuffix 5_9_1 Name: unrar -Version: 5.8.5 +Version: 5.9.1 Release: 0 Summary: A program to extract, test, and view RAR archives License: NonFree ++++++ unrarsrc-5.8.5.tar.gz -> unrarsrc-5.9.1.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/unrar/arccmt.cpp new/unrar/arccmt.cpp --- old/unrar/arccmt.cpp 2019-12-05 08:39:19.000000000 +0100 +++ new/unrar/arccmt.cpp 2020-01-28 16:03:58.000000000 +0100 @@ -4,8 +4,15 @@ { if (!MainComment) return false; - SaveFilePos SavePos(*this); + int64 SavePos=Tell(); + bool Success=DoGetComment(CmtData); + Seek(SavePos,SEEK_SET); + return Success; +} + +bool Archive::DoGetComment(Array<wchar> *CmtData) +{ #ifndef SFX_MODULE uint CmtLength; if (Format==RARFMT14) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/unrar/archive.cpp new/unrar/archive.cpp --- old/unrar/archive.cpp 2019-12-05 08:39:19.000000000 +0100 +++ new/unrar/archive.cpp 2020-01-28 16:03:58.000000000 +0100 @@ -208,8 +208,8 @@ break; } - // This check allows to make RS based recovery even if password is incorrect. - // But we should not do it for EnableBroken or we'll get 'not RAR archive' + + // We should not do it for EnableBroken or we'll get 'not RAR archive' // messages when extracting encrypted archives with wrong password. if (FailedHeaderDecryption && !EnableBroken) return false; @@ -233,7 +233,7 @@ // immediately after IsArchive call. if (HeadersLeft && (!SilentOpen || !Encrypted)) { - SaveFilePos SavePos(*this); + int64 SavePos=Tell(); int64 SaveCurBlockPos=CurBlockPos,SaveNextBlockPos=NextBlockPos; HEADER_TYPE SaveCurHeaderType=CurHeaderType; @@ -262,6 +262,7 @@ CurBlockPos=SaveCurBlockPos; NextBlockPos=SaveNextBlockPos; CurHeaderType=SaveCurHeaderType; + Seek(SavePos,SEEK_SET); } if (!Volume || FirstVolume) wcsncpyz(FirstVolumeName,FileName,ASIZE(FirstVolumeName)); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/unrar/archive.hpp new/unrar/archive.hpp --- old/unrar/archive.hpp 2019-12-05 08:39:19.000000000 +0100 +++ new/unrar/archive.hpp 2020-01-28 16:03:58.000000000 +0100 @@ -37,6 +37,7 @@ void UnexpEndArcMsg(); void BrokenHeaderMsg(); void UnkEncVerMsg(const wchar *Name,const wchar *Info); + bool DoGetComment(Array<wchar> *CmtData); bool ReadCommentData(Array<wchar> *CmtData); #if !defined(RAR_NOCRYPT) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/unrar/arcread.cpp new/unrar/arcread.cpp --- old/unrar/arcread.cpp 2019-12-05 08:39:19.000000000 +0100 +++ new/unrar/arcread.cpp 2020-01-28 16:03:58.000000000 +0100 @@ -521,7 +521,6 @@ { // Last 7 bytes of recovered volume can contain zeroes, because // REV files store its own information (volume number, etc.) here. - SaveFilePos SavePos(*this); int64 Length=Tell(); Seek(Length-7,SEEK_SET); Recovered=true; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/unrar/cmddata.cpp new/unrar/cmddata.cpp --- old/unrar/cmddata.cpp 2019-12-05 08:39:19.000000000 +0100 +++ new/unrar/cmddata.cpp 2020-01-28 16:03:58.000000000 +0100 @@ -953,7 +953,6 @@ case 'X': case 'E': case 'T': - case 'I': { CmdExtract Extract(this); Extract.DoExtract(); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/unrar/dll.rc new/unrar/dll.rc --- old/unrar/dll.rc 2019-12-05 08:36:19.000000000 +0100 +++ new/unrar/dll.rc 2020-01-28 16:01:01.000000000 +0100 @@ -2,8 +2,8 @@ #include <commctrl.h> VS_VERSION_INFO VERSIONINFO -FILEVERSION 5, 80, 100, 3266 -PRODUCTVERSION 5, 80, 100, 3266 +FILEVERSION 5, 90, 1, 3321 +PRODUCTVERSION 5, 90, 1, 3321 FILEOS VOS__WINDOWS32 FILETYPE VFT_APP { @@ -14,9 +14,9 @@ VALUE "CompanyName", "Alexander Roshal\0" VALUE "ProductName", "RAR decompression library\0" VALUE "FileDescription", "RAR decompression library\0" - VALUE "FileVersion", "5.80.0\0" - VALUE "ProductVersion", "5.80.0\0" - VALUE "LegalCopyright", "Copyright � Alexander Roshal 1993-2019\0" + VALUE "FileVersion", "5.90.1\0" + VALUE "ProductVersion", "5.90.1\0" + VALUE "LegalCopyright", "Copyright � Alexander Roshal 1993-2020\0" VALUE "OriginalFilename", "Unrar.dll\0" } } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/unrar/errhnd.cpp new/unrar/errhnd.cpp --- old/unrar/errhnd.cpp 2019-12-05 08:39:19.000000000 +0100 +++ new/unrar/errhnd.cpp 2020-01-28 16:03:58.000000000 +0100 @@ -158,6 +158,7 @@ void ErrorHandler::OpenErrorMsg(const wchar *ArcName,const wchar *FileName) { + Wait(); // Keep GUI responsive if many files cannot be opened when archiving. uiMsg(UIERROR_FILEOPEN,ArcName,FileName); SysErrMsg(); SetErrorCode(RARX_OPEN); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/unrar/extract.cpp new/unrar/extract.cpp --- old/unrar/extract.cpp 2019-12-05 08:39:19.000000000 +0100 +++ new/unrar/extract.cpp 2020-01-28 16:03:58.000000000 +0100 @@ -40,6 +40,8 @@ { if (Cmd->ManualPassword) Cmd->Password.Clean(); // Clean user entered password before processing next archive. + + ReconstructDone=false; // Must be reset here, not in ExtractArchiveInit(). while (true) { EXTRACT_ARC_CODE Code=ExtractArchive(); @@ -93,7 +95,6 @@ PrevProcessed=false; AllMatchesExact=true; - ReconstructDone=false; AnySolidDataUnpackedWell=false; StartTime.SetCurrentTime(); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/unrar/file.cpp new/unrar/file.cpp --- old/unrar/file.cpp 2019-12-05 08:39:19.000000000 +0100 +++ new/unrar/file.cpp 2020-01-28 16:03:58.000000000 +0100 @@ -684,9 +684,11 @@ int64 File::FileLength() { - SaveFilePos SavePos(*this); + int64 SavePos=Tell(); Seek(0,SEEK_END); - return Tell(); + int64 Length=Tell(); + Seek(SavePos,SEEK_SET); + return Length; } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/unrar/filefn.cpp new/unrar/filefn.cpp --- old/unrar/filefn.cpp 2019-12-05 08:39:19.000000000 +0100 +++ new/unrar/filefn.cpp 2020-01-28 16:03:58.000000000 +0100 @@ -360,7 +360,7 @@ #if !defined(SFX_MODULE) void CalcFileSum(File *SrcFile,uint *CRC32,byte *Blake2,uint Threads,int64 Size,uint Flags) { - SaveFilePos SavePos(*SrcFile); + int64 SavePos=SrcFile->Tell(); #ifndef SILENT int64 FileLength=Size==INT64NDF ? SrcFile->FileLength() : Size; #endif @@ -415,6 +415,8 @@ if (Size!=INT64NDF) Size-=ReadSize; } + SrcFile->Seek(SavePos,SEEK_SET); + if ((Flags & CALCFSUM_SHOWPERCENT)!=0) uiMsg(UIEVENT_FILESUMEND); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/unrar/loclang.hpp new/unrar/loclang.hpp --- old/unrar/loclang.hpp 2019-12-05 08:39:20.000000000 +0100 +++ new/unrar/loclang.hpp 2020-01-28 16:03:59.000000000 +0100 @@ -379,3 +379,4 @@ #define MNeedAdmin L"\nYou may need to run RAR as administrator" #define MDictOutMem L"\nNot enough memory for %d MB compression dictionary, changed to %d MB." #define MUseSmalllerDict L"\nPlease use a smaller compression dictionary." +#define MOpenErrAtime L"\nYou may need to remove -tsp switch to open this file." diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/unrar/pathfn.cpp new/unrar/pathfn.cpp --- old/unrar/pathfn.cpp 2019-12-05 08:39:20.000000000 +0100 +++ new/unrar/pathfn.cpp 2020-01-28 16:03:59.000000000 +0100 @@ -170,8 +170,11 @@ void AddEndSlash(wchar *Path,size_t MaxLength) { size_t Length=wcslen(Path); - if (Length>0 && Path[Length-1]!=CPATHDIVIDER) - wcsncatz(Path,SPATHDIVIDER,MaxLength); + if (Length>0 && Path[Length-1]!=CPATHDIVIDER && Length+1<MaxLength) + { + Path[Length]=CPATHDIVIDER; + Path[Length+1]=0; + } } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/unrar/qopen.cpp new/unrar/qopen.cpp --- old/unrar/qopen.cpp 2019-12-05 08:39:20.000000000 +0100 +++ new/unrar/qopen.cpp 2020-01-28 16:03:59.000000000 +0100 @@ -67,7 +67,7 @@ SeekPos=Arc->Tell(); UnsyncSeekPos=false; - SaveFilePos SavePos(*Arc); + int64 SavePos=SeekPos; Arc->Seek(BlockPos,SEEK_SET); // If BlockPos points to original main header, we'll have the infinite @@ -83,10 +83,14 @@ if (ReadSize==0 || Arc->GetHeaderType()!=HEAD_SERVICE || !Arc->SubHead.CmpName(SUBHEAD_TYPE_QOPEN)) + { + Arc->Seek(SavePos,SEEK_SET); return; + } QOHeaderPos=Arc->CurBlockPos; RawDataStart=Arc->Tell(); RawDataSize=Arc->SubHead.UnpSize; + Arc->Seek(SavePos,SEEK_SET); Loaded=true; // Set only after all file processing calls like Tell, Seek, ReadHeader. } @@ -201,22 +205,28 @@ uint QuickOpen::ReadBuffer() { - SaveFilePos SavePos(*Arc); + int ReadSize=0; + int64 SavePos=Arc->Tell(); Arc->File::Seek(RawDataStart+RawDataPos,SEEK_SET); size_t SizeToRead=(size_t)Min(RawDataSize-RawDataPos,MaxBufSize-ReadBufSize); if (Arc->SubHead.Encrypted) SizeToRead &= ~CRYPT_BLOCK_MASK; - if (SizeToRead==0) - return 0; - int ReadSize=Arc->File::Read(Buf+ReadBufSize,SizeToRead); - if (ReadSize<=0) - return 0; + if (SizeToRead!=0) + { + int ReadSize=Arc->File::Read(Buf+ReadBufSize,SizeToRead); + if (ReadSize<=0) + ReadSize=0; + else + { #ifndef RAR_NOCRYPT - if (Arc->SubHead.Encrypted) - Crypt.DecryptBlock(Buf+ReadBufSize,ReadSize & ~CRYPT_BLOCK_MASK); + if (Arc->SubHead.Encrypted) + Crypt.DecryptBlock(Buf+ReadBufSize,ReadSize & ~CRYPT_BLOCK_MASK); #endif - RawDataPos+=ReadSize; - ReadBufSize+=ReadSize; + RawDataPos+=ReadSize; + ReadBufSize+=ReadSize; + } + } + Arc->Seek(SavePos,SEEK_SET); return ReadSize; } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/unrar/rar.hpp new/unrar/rar.hpp --- old/unrar/rar.hpp 2019-12-05 08:39:20.000000000 +0100 +++ new/unrar/rar.hpp 2020-01-28 16:03:59.000000000 +0100 @@ -39,7 +39,6 @@ #include "filestr.hpp" #include "find.hpp" #include "scantree.hpp" -#include "savepos.hpp" #include "getbits.hpp" #include "rdwrfn.hpp" #ifdef USE_QOPEN diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/unrar/rartypes.hpp new/unrar/rartypes.hpp --- old/unrar/rartypes.hpp 2019-12-05 08:39:20.000000000 +0100 +++ new/unrar/rartypes.hpp 2020-01-28 16:03:59.000000000 +0100 @@ -21,15 +21,12 @@ // Maximum int64 value. #define MAX_INT64 int64(INT32TO64(0x7fffffff,0xffffffff)) -// Special int64 value, large enough to never be found in real life. +// Special int64 value, large enough to never be found in real life +// and small enough to fit to both signed and unsigned 64-bit ints. // We use it in situations, when we need to indicate that parameter // is not defined and probably should be calculated inside of function. // Lower part is intentionally 0x7fffffff, not 0xffffffff, to make it -// compatible with 32 bit int64. +// compatible with 32 bit int64 if 64 bit type is not supported. #define INT64NDF INT32TO64(0x7fffffff,0x7fffffff) -// Maximum uint64 value. -#define MAX_UINT64 INT32TO64(0xffffffff,0xffffffff) -#define UINT64NDF MAX_UINT64 - #endif diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/unrar/resource.cpp new/unrar/resource.cpp --- old/unrar/resource.cpp 2019-12-05 08:39:20.000000000 +0100 +++ new/unrar/resource.cpp 2020-01-28 16:03:59.000000000 +0100 @@ -2,8 +2,10 @@ + + #ifndef RARDLL -const wchar *St(MSGID StringId) +const wchar* St(MSGID StringId) { return StringId; } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/unrar/threadpool.cpp new/unrar/threadpool.cpp --- old/unrar/threadpool.cpp 2019-12-05 08:39:20.000000000 +0100 +++ new/unrar/threadpool.cpp 2020-01-28 16:04:00.000000000 +0100 @@ -170,12 +170,13 @@ CreateThreads(); // If queue is full, wait until it is empty. - if ((QueueTop + 1) % ASIZE(TaskQueue) == QueueBottom) + if (ActiveThreads>=ASIZE(TaskQueue)) WaitDone(); TaskQueue[QueueTop].Proc = Proc; TaskQueue[QueueTop].Param = Data; QueueTop = (QueueTop + 1) % ASIZE(TaskQueue); + ActiveThreads++; } @@ -184,9 +185,6 @@ // are sleeping yet. void ThreadPool::WaitDone() { - // We add ASIZE(TaskQueue) for case if TaskQueue array size is not - // a power of two. Negative numbers would not suit our purpose here. - ActiveThreads=(QueueTop+ASIZE(TaskQueue)-QueueBottom) % ASIZE(TaskQueue); if (ActiveThreads==0) return; #ifdef _WIN_ALL diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/unrar/threadpool.hpp new/unrar/threadpool.hpp --- old/unrar/threadpool.hpp 2019-12-05 08:39:20.000000000 +0100 +++ new/unrar/threadpool.hpp 2020-01-28 16:04:00.000000000 +0100 @@ -4,7 +4,10 @@ #ifndef RAR_SMP const uint MaxPoolThreads=1; // For single threaded version. #else -const uint MaxPoolThreads=32; +// We need to use the processor groups API to increase it beyond 64. +// Also be sure to check and adjust if needed per thread and total block size +// when compressing if going above 64. +const uint MaxPoolThreads=64; #ifdef _UNIX diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/unrar/ui.hpp new/unrar/ui.hpp --- old/unrar/ui.hpp 2019-12-05 08:39:21.000000000 +0100 +++ new/unrar/ui.hpp 2020-01-28 16:04:00.000000000 +0100 @@ -38,6 +38,7 @@ UIERROR_PATHTOOLONG, UIERROR_DIRSCAN, UIERROR_UOWNERGET, UIERROR_UOWNERBROKEN, UIERROR_UOWNERGETOWNERID, UIERROR_UOWNERGETGROUPID, UIERROR_UOWNERSET, UIERROR_ULINKREAD, UIERROR_ULINKEXIST, + UIERROR_OPENPRESERVEATIME, UIMSG_FIRST, UIMSG_STRING, UIMSG_BUILD, UIMSG_RRSEARCH, UIMSG_ANALYZEFILEDATA, diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/unrar/unicode.cpp new/unrar/unicode.cpp --- old/unrar/unicode.cpp 2019-12-05 08:39:21.000000000 +0100 +++ new/unrar/unicode.cpp 2020-01-28 16:04:00.000000000 +0100 @@ -654,3 +654,5 @@ return((char *)found); } #endif + + diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/unrar/unicode.hpp new/unrar/unicode.hpp --- old/unrar/unicode.hpp 2019-12-05 08:39:21.000000000 +0100 +++ new/unrar/unicode.hpp 2020-01-28 16:04:00.000000000 +0100 @@ -63,4 +63,5 @@ inline void copychrd(char *dest,const char *src) {*dest=*src;} #endif + #endif diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/unrar/unpack.hpp new/unrar/unpack.hpp --- old/unrar/unpack.hpp 2019-12-05 08:39:21.000000000 +0100 +++ new/unrar/unpack.hpp 2020-01-28 16:04:00.000000000 +0100 @@ -24,7 +24,7 @@ #define MAX_FILTER_BLOCK_SIZE 0x400000 // Write data in 4 MB or smaller blocks. Must not exceed PACK_MAX_WRITE, -// so we keep number of buffered filter in unpacker reasonable. +// so we keep a number of buffered filters in unpacker reasonable. #define UNPACK_MAX_WRITE 0x400000 // Decode compressed bit fields to alphabet numbers. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/unrar/version.hpp new/unrar/version.hpp --- old/unrar/version.hpp 2019-12-05 08:39:21.000000000 +0100 +++ new/unrar/version.hpp 2020-01-28 16:04:00.000000000 +0100 @@ -1,6 +1,6 @@ #define RARVER_MAJOR 5 -#define RARVER_MINOR 80 -#define RARVER_BETA 0 -#define RARVER_DAY 5 -#define RARVER_MONTH 12 -#define RARVER_YEAR 2019 +#define RARVER_MINOR 90 +#define RARVER_BETA 1 +#define RARVER_DAY 28 +#define RARVER_MONTH 1 +#define RARVER_YEAR 2020