Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package unrar for openSUSE:Factory:NonFree checked in at 2023-06-24 20:13:04 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory:NonFree/unrar (Old) and /work/SRC/openSUSE:Factory:NonFree/.unrar.new.15902 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "unrar" Sat Jun 24 20:13:04 2023 rev:105 rq:1094709 version:6.2.8 Changes: -------- --- /work/SRC/openSUSE:Factory:NonFree/unrar/unrar.changes 2023-03-09 17:43:58.330343353 +0100 +++ /work/SRC/openSUSE:Factory:NonFree/.unrar.new.15902/unrar.changes 2023-06-24 20:13:05.203840807 +0200 @@ -1,0 +2,6 @@ +Thu Jun 22 14:32:49 UTC 2023 - Pablo Herranz RamÃrez <[email protected]> + +- Update to version 6.2.8 + * No upstream changelog available + +------------------------------------------------------------------- Old: ---- unrarsrc-6.2.5.tar.gz New: ---- unrarsrc-6.2.8.tar.gz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ unrar.spec ++++++ --- /var/tmp/diff_new_pack.lm6hTI/_old 2023-06-24 20:13:06.731849829 +0200 +++ /var/tmp/diff_new_pack.lm6hTI/_new 2023-06-24 20:13:06.739849876 +0200 @@ -18,9 +18,9 @@ # majorversion should match the major version number. %define majorversion 6 -%define libsuffix 6_2_5 +%define libsuffix 6_2_8 Name: unrar -Version: 6.2.5 +Version: 6.2.8 Release: 0 Summary: A program to extract, test, and view RAR archives License: NonFree ++++++ baselibs.conf ++++++ --- /var/tmp/diff_new_pack.lm6hTI/_old 2023-06-24 20:13:06.799850231 +0200 +++ /var/tmp/diff_new_pack.lm6hTI/_new 2023-06-24 20:13:06.807850278 +0200 @@ -1,2 +1,2 @@ -libunrar6_2_5 +libunrar6_2_8 ++++++ soname.patch ++++++ --- /var/tmp/diff_new_pack.lm6hTI/_old 2023-06-24 20:13:06.819850349 +0200 +++ /var/tmp/diff_new_pack.lm6hTI/_new 2023-06-24 20:13:06.823850372 +0200 @@ -4,7 +4,7 @@ +++ unrar/makefile @@ -157,7 +157,7 @@ lib: WHAT=RARDLL lib: CXXFLAGS+=$(LIBFLAGS) - lib: clean $(OBJECTS) $(LIB_OBJ) + lib: $(OBJECTS) $(LIB_OBJ) @rm -f libunrar.* - $(LINK) -shared -o libunrar.so $(LDFLAGS) $(OBJECTS) $(LIB_OBJ) + $(LINK) -shared -Wl,-soname,libunrar.so.$(libversion) -o libunrar.so.$(libversion) $(LDFLAGS) $(OBJECTS) $(LIB_OBJ) ++++++ unrarsrc-6.2.5.tar.gz -> unrarsrc-6.2.8.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/unrar/archive.hpp new/unrar/archive.hpp --- old/unrar/archive.hpp 2023-01-24 17:25:30.000000000 +0100 +++ new/unrar/archive.hpp 2023-05-29 18:05:16.000000000 +0200 @@ -107,7 +107,6 @@ FileHeader SubHead; CommentHeader CommHead; ProtectHeader ProtectHead; - UnixOwnersHeader UOHead; EAHeader EAHead; StreamHeader StreamHead; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/unrar/arcread.cpp new/unrar/arcread.cpp --- old/unrar/arcread.cpp 2023-01-24 17:25:30.000000000 +0100 +++ new/unrar/arcread.cpp 2023-05-29 18:05:16.000000000 +0200 @@ -254,7 +254,11 @@ hd->SplitAfter=(hd->Flags & LHD_SPLIT_AFTER)!=0; hd->Encrypted=(hd->Flags & LHD_PASSWORD)!=0; hd->SaltSet=(hd->Flags & LHD_SALT)!=0; + + // RAR versions earlier than 2.0 do not set the solid flag + // in file header. They use only a global solid archive flag. hd->Solid=FileBlock && (hd->Flags & LHD_SOLID)!=0; + hd->SubBlock=!FileBlock && (hd->Flags & LHD_SOLID)!=0; hd->Dir=(hd->Flags & LHD_WINDOWMASK)==LHD_DIRECTORY; hd->WinSize=hd->Dir ? 0:0x10000<<((hd->Flags & LHD_WINDOWMASK)>>5); @@ -472,19 +476,6 @@ SubBlockHead.Level=Raw.Get1(); switch(SubBlockHead.SubType) { - case UO_HEAD: - *(SubBlockHeader *)&UOHead=SubBlockHead; - UOHead.OwnerNameSize=Raw.Get2(); - UOHead.GroupNameSize=Raw.Get2(); - if (UOHead.OwnerNameSize>=ASIZE(UOHead.OwnerName)) - UOHead.OwnerNameSize=ASIZE(UOHead.OwnerName)-1; - if (UOHead.GroupNameSize>=ASIZE(UOHead.GroupName)) - UOHead.GroupNameSize=ASIZE(UOHead.GroupName)-1; - Raw.GetB(UOHead.OwnerName,UOHead.OwnerNameSize); - Raw.GetB(UOHead.GroupName,UOHead.GroupNameSize); - UOHead.OwnerName[UOHead.OwnerNameSize]=0; - UOHead.GroupName[UOHead.GroupNameSize]=0; - break; case NTACL_HEAD: *(SubBlockHeader *)&EAHead=SubBlockHead; EAHead.UnpSize=Raw.Get4(); @@ -516,8 +507,12 @@ ushort HeaderCRC=Raw.GetCRC15(false); // Old AV header does not have header CRC properly set. + // Old Unix owners header didn't include string fields into header size, + // but included them into CRC, so it couldn't be verified with generic + // approach here. if (ShortBlock.HeadCRC!=HeaderCRC && ShortBlock.HeaderType!=HEAD3_SIGN && - ShortBlock.HeaderType!=HEAD3_AV) + ShortBlock.HeaderType!=HEAD3_AV && + (ShortBlock.HeaderType!=HEAD3_OLDSERVICE || SubBlockHead.SubType!=UO_HEAD)) { bool Recovered=false; if (ShortBlock.HeaderType==HEAD_ENDARC && EndArcHead.RevSpace) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/unrar/dll.rc new/unrar/dll.rc --- old/unrar/dll.rc 2023-01-24 17:12:32.000000000 +0100 +++ new/unrar/dll.rc 2023-05-29 18:02:08.000000000 +0200 @@ -2,8 +2,8 @@ #include <commctrl.h> VS_VERSION_INFO VERSIONINFO -FILEVERSION 6, 21, 1, 755 -PRODUCTVERSION 6, 21, 1, 755 +FILEVERSION 6, 22, 100, 880 +PRODUCTVERSION 6, 22, 100, 880 FILEOS VOS__WINDOWS32 FILETYPE VFT_APP { @@ -14,8 +14,8 @@ VALUE "CompanyName", "Alexander Roshal\0" VALUE "ProductName", "RAR decompression library\0" VALUE "FileDescription", "RAR decompression library\0" - VALUE "FileVersion", "6.21.1\0" - VALUE "ProductVersion", "6.21.1\0" + VALUE "FileVersion", "6.22.0\0" + VALUE "ProductVersion", "6.22.0\0" VALUE "LegalCopyright", "Copyright © Alexander Roshal 1993-2023\0" VALUE "OriginalFilename", "Unrar.dll\0" } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/unrar/extinfo.cpp new/unrar/extinfo.cpp --- old/unrar/extinfo.cpp 2023-01-24 17:25:30.000000000 +0100 +++ new/unrar/extinfo.cpp 2023-05-29 18:05:16.000000000 +0200 @@ -21,17 +21,11 @@ #ifndef SFX_MODULE void SetExtraInfo20(CommandData *Cmd,Archive &Arc,wchar *Name) { +#ifdef _WIN_ALL if (Cmd->Test) return; switch(Arc.SubBlockHead.SubType) { -#ifdef _UNIX - case UO_HEAD: - if (Cmd->ProcessOwners) - ExtractUnixOwner20(Arc,Name); - break; -#endif -#ifdef _WIN_ALL case NTACL_HEAD: if (Cmd->ProcessOwners) ExtractACL20(Arc,Name); @@ -39,8 +33,8 @@ case STREAM_HEAD: ExtractStreams20(Arc,Name); break; -#endif } +#endif } #endif diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/unrar/extract.cpp new/unrar/extract.cpp --- old/unrar/extract.cpp 2023-01-24 17:25:30.000000000 +0100 +++ new/unrar/extract.cpp 2023-05-29 18:05:16.000000000 +0200 @@ -38,13 +38,13 @@ CmdExtract::~CmdExtract() { - ReleaseAnalyzeData(); + FreeAnalyzeData(); delete Unp; delete Analyze; } -void CmdExtract::ReleaseAnalyzeData() +void CmdExtract::FreeAnalyzeData() { for (size_t I=0;I<RefList.Size();I++) { @@ -806,6 +806,11 @@ { bool UpLink; LinkSuccess=ExtractSymlink(Cmd,DataIO,Arc,DestFileName,UpLink); + + // Unix symlink can have its own owner data. + if (LinkSuccess) + SetFileHeaderExtra(Cmd,Arc,DestFileName); + ConvertSymlinkPaths|=LinkSuccess && UpLink; // We do not actually need to reset the cache here if we cache @@ -846,6 +851,7 @@ Unp->Init(Arc.FileHead.WinSize,Arc.FileHead.Solid); Unp->SetDestSize(Arc.FileHead.UnpSize); #ifndef SFX_MODULE + // RAR 1.3 - 1.5 archives do not set per file solid flag. if (Arc.Format!=RARFMT50 && Arc.FileHead.UnpVer<=15) Unp->DoUnpack(15,FileCount>1 && Arc.Solid); else @@ -1466,7 +1472,7 @@ // void CmdExtract::AnalyzeArchive(const wchar *ArcName,bool Volume,bool NewNumbering) { - ReleaseAnalyzeData(); // If processing non-first archive in multiple archives set. + FreeAnalyzeData(); // If processing non-first archive in multiple archives set. wchar *ArgName=Cmd->FileArgs.GetString(); Cmd->FileArgs.Rewind(); @@ -1481,10 +1487,16 @@ wcsncpyz(NextName,ArcName,ASIZE(NextName)); bool MatchFound=false; - bool FirstVolume=true; bool PrevMatched=false; bool OpenNext=false; + bool FirstVolume=true; + + // We shall set FirstFile once for all volumes and not for each volume. + // So we do not reuse the outdated Analyze->StartPos from previous volume + // if extracted file resides completely in the beginning of current one. + bool FirstFile=true; + while (true) { Archive Arc(Cmd); @@ -1502,7 +1514,6 @@ } OpenNext=false; - bool FirstFile=true; while (Arc.ReadHeader()>0) { Wait(); @@ -1515,18 +1526,32 @@ } if (HeaderType==HEAD_FILE) { + if ((Arc.Format==RARFMT14 || Arc.Format==RARFMT15) && Arc.FileHead.UnpVer<=15) + { + // RAR versions earlier than 2.0 do not set per file solid flag. + // They have only the global archive solid flag, so we can't + // reliably analyze them here. + OpenNext=false; + break; + } + if (!Arc.FileHead.SplitBefore) { if (!MatchFound && !Arc.FileHead.Solid) // Can start extraction from here. { // We would gain nothing and unnecessarily complicate extraction - // by setting these values for first volume or first archived file. + // if we set StartName for first volume or StartPos for first + // archived file. if (!FirstVolume) wcsncpyz(Analyze->StartName,NextName,ASIZE(Analyze->StartName)); + + // We shall set FirstFile once for all volumes for this code + // to work properly. Alternatively we could append + // "|| Analyze->StartPos!=0" to the condition, so we do not reuse + // the outdated Analyze->StartPos value from previous volume. if (!FirstFile) Analyze->StartPos=Arc.CurBlockPos; } - FirstFile=false; if (Cmd->IsProcessFile(Arc.FileHead,NULL,MATCH_WILDSUBPATH,0,NULL,0)!=0) { @@ -1571,16 +1596,18 @@ { if (PrevMatched) // First non-matched item after matched. { - // We would gain nothing and unnecessarily complicate extraction - // by setting these values for first volume or first archived file. + // We would perform the unnecessarily string comparison + // when extracting if we set this value for first volume + // or non-volume archive. if (!FirstVolume) wcsncpyz(Analyze->EndName,NextName,ASIZE(Analyze->EndName)); - if (!FirstFile) - Analyze->EndPos=Arc.CurBlockPos; + Analyze->EndPos=Arc.CurBlockPos; } PrevMatched=false; } } + + FirstFile=false; if (Arc.FileHead.SplitAfter) { OpenNext=true; // Allow open next volume. @@ -1595,6 +1622,12 @@ { NextVolumeName(NextName,ASIZE(NextName),!Arc.NewNumbering); FirstVolume=false; + + // Needed for multivolume archives. Added in case some 'break' + // will quit early from loop above, so we do not set it in the loop. + // Now it can happen for hypothetical archive without file records + // and with HEAD_ENDARC record. + FirstFile=false; } else break; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/unrar/extract.hpp new/unrar/extract.hpp --- old/unrar/extract.hpp 2023-01-24 17:25:30.000000000 +0100 +++ new/unrar/extract.hpp 2023-05-29 18:05:16.000000000 +0200 @@ -24,7 +24,7 @@ bool ArcAnalyzed; - void ReleaseAnalyzeData(); + void FreeAnalyzeData(); EXTRACT_ARC_CODE ExtractArchive(); bool ExtractFileCopy(File &New,wchar *ArcName,const wchar *RedirName,wchar *NameNew,wchar *NameExisting,size_t NameExistingSize,int64 UnpSize); void ExtrPrepareName(Archive &Arc,const wchar *ArcFileName,wchar *DestName,size_t DestSize); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/unrar/headers.hpp new/unrar/headers.hpp --- old/unrar/headers.hpp 2023-01-24 17:25:31.000000000 +0100 +++ new/unrar/headers.hpp 2023-05-29 18:05:17.000000000 +0200 @@ -11,7 +11,6 @@ #define SIZEOF_SUBBLOCKHEAD 14 #define SIZEOF_COMMHEAD 13 #define SIZEOF_PROTECTHEAD 26 -#define SIZEOF_UOHEAD 18 #define SIZEOF_STREAMHEAD 26 #define VER_PACK 29U @@ -325,16 +324,6 @@ }; -struct UnixOwnersHeader:SubBlockHeader -{ - ushort OwnerNameSize; - ushort GroupNameSize; -/* dummy */ - char OwnerName[256]; - char GroupName[256]; -}; - - struct EAHeader:SubBlockHeader { uint UnpSize; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/unrar/makefile new/unrar/makefile --- old/unrar/makefile 2022-10-24 17:36:02.000000000 +0200 +++ new/unrar/makefile 2023-02-06 11:31:30.000000000 +0100 @@ -142,20 +142,23 @@ @rm -f $(OBJECTS) $(UNRAR_OBJ) $(LIB_OBJ) @rm -f unrar libunrar.* -unrar: clean $(OBJECTS) $(UNRAR_OBJ) +# We removed 'clean' from dependencies, because it prevented parallel +# 'make -Jn' builds. + +unrar: $(OBJECTS) $(UNRAR_OBJ) @rm -f unrar $(LINK) -o unrar $(LDFLAGS) $(OBJECTS) $(UNRAR_OBJ) $(LIBS) $(STRIP) unrar sfx: WHAT=SFX_MODULE -sfx: clean $(OBJECTS) +sfx: $(OBJECTS) @rm -f default.sfx $(LINK) -o default.sfx $(LDFLAGS) $(OBJECTS) $(STRIP) default.sfx lib: WHAT=RARDLL lib: CXXFLAGS+=$(LIBFLAGS) -lib: clean $(OBJECTS) $(LIB_OBJ) +lib: $(OBJECTS) $(LIB_OBJ) @rm -f libunrar.* $(LINK) -shared -o libunrar.so $(LDFLAGS) $(OBJECTS) $(LIB_OBJ) $(AR) rcs libunrar.a $(OBJECTS) $(LIB_OBJ) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/unrar/pathfn.cpp new/unrar/pathfn.cpp --- old/unrar/pathfn.cpp 2023-01-24 17:25:31.000000000 +0100 +++ new/unrar/pathfn.cpp 2023-05-29 18:05:17.000000000 +0200 @@ -428,50 +428,39 @@ bool IsNameUsable(const wchar *Name) { -#ifndef _UNIX - if (Name[0] && Name[1] && wcschr(Name+2,':')!=NULL) + // We were asked to apply Windows-like conversion in Linux in case + // files are unpacked to Windows share. This code is invoked only + // if file failed to be created, so it doesn't affect extraction + // of Unix compatible names to native Unix drives. +#ifdef _UNIX + // Windows shares in Unix do not allow the drive letter, + // so unlike Windows version, we check all characters here. + if (wcschr(Name,':')!=NULL) return false; +#else + if (Name[0]!=0 && Name[1]!=0 && wcschr(Name+2,':')!=NULL) + return false; +#endif for (const wchar *s=Name;*s!=0;s++) { if ((uint)*s<32) return false; + + // It is for Windows shares in Unix. We can create such names in Windows. +#ifdef _UNIX + // No spaces or dots before the path separator are allowed in Windows + // shares. But they are allowed and automtically removed at the end of + // file or folder name, so it is useless to replace them here. + // Since such files or folders are created successfully, a supposed + // conversion here would never be invoked. if ((*s==' ' || *s=='.') && IsPathDiv(s[1])) return false; - } #endif + } return *Name!=0 && wcspbrk(Name,L"?*<>|\"")==NULL; } -void MakeNameUsable(char *Name,bool Extended) -{ -#ifdef _WIN_ALL - // In Windows we also need to convert characters not defined in current - // code page. This double conversion changes them to '?', which is - // catched by code below. - size_t NameLength=strlen(Name); - wchar NameW[NM]; - CharToWide(Name,NameW,ASIZE(NameW)); - WideToChar(NameW,Name,NameLength+1); - Name[NameLength]=0; -#endif - for (char *s=Name;*s!=0;s=charnext(s)) - { - if (strchr(Extended ? "?*<>|\"":"?*",*s)!=NULL || Extended && (byte)*s<32) - *s='_'; -#ifdef _EMX - if (*s=='=') - *s='_'; -#endif -#ifndef _UNIX - if (s-Name>1 && *s==':') - *s='_'; - // Remove ' ' and '.' before path separator, but allow .\ and ..\. - if ((*s==' ' || *s=='.' && s>Name && !IsPathDiv(s[-1]) && s[-1]!='.') && IsPathDiv(s[1])) - *s='_'; -#endif - } -} void MakeNameUsable(wchar *Name,bool Extended) @@ -480,7 +469,27 @@ { if (wcschr(Extended ? L"?*<>|\"":L"?*",*s)!=NULL || Extended && (uint)*s<32) *s='_'; -#ifndef _UNIX +#ifdef _UNIX + // We were asked to apply Windows-like conversion in Linux in case + // files are unpacked to Windows share. This code is invoked only + // if file failed to be created, so it doesn't affect extraction + // of Unix compatible names to native Unix drives. + if (Extended) + { + // Windows shares in Unix do not allow the drive letter, + // so unlike Windows version, we check all characters here. + if (*s==':') + *s='_'; + + // No spaces or dots before the path separator are allowed on Windows + // shares. But they are allowed and automtically removed at the end of + // file or folder name, so it is useless to replace them here. + // Since such files or folders are created successfully, a supposed + // conversion here would never be invoked. + if ((*s==' ' || *s=='.') && IsPathDiv(s[1])) + *s='_'; + } +#else if (s-Name>1 && *s==':') *s='_'; #if 0 // We already can create such files. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/unrar/pathfn.hpp new/unrar/pathfn.hpp --- old/unrar/pathfn.hpp 2023-01-24 17:25:31.000000000 +0100 +++ new/unrar/pathfn.hpp 2023-05-29 18:05:17.000000000 +0200 @@ -29,7 +29,6 @@ wchar* GetVolNumPart(const wchar *ArcName); void NextVolumeName(wchar *ArcName,uint MaxLength,bool OldNumbering); bool IsNameUsable(const wchar *Name); -void MakeNameUsable(char *Name,bool Extended); void MakeNameUsable(wchar *Name,bool Extended); void UnixSlashToDos(const char *SrcName,char *DestName,size_t MaxLength); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/unrar/uiconsole.cpp new/unrar/uiconsole.cpp --- old/unrar/uiconsole.cpp 2023-01-24 17:25:32.000000000 +0100 +++ new/unrar/uiconsole.cpp 2023-05-29 18:05:17.000000000 +0200 @@ -183,6 +183,7 @@ Log(NULL,St(MNeedAdmin)); break; case UIERROR_ARCBROKEN: + mprintf(L"\n"); // So it is not merged with preceding UIERROR_HEADERBROKEN. Log(Str[0],St(MErrBrokenArc)); break; case UIERROR_HEADERBROKEN: diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/unrar/uowners.cpp new/unrar/uowners.cpp --- old/unrar/uowners.cpp 2023-01-24 17:25:32.000000000 +0100 +++ new/unrar/uowners.cpp 2023-05-29 18:05:18.000000000 +0200 @@ -1,56 +1,12 @@ -void ExtractUnixOwner20(Archive &Arc,const wchar *FileName) +void ExtractUnixOwner30(Archive &Arc,const wchar *FileName) { char NameA[NM]; WideToChar(FileName,NameA,ASIZE(NameA)); - if (Arc.BrokenHeader) - { - uiMsg(UIERROR_UOWNERBROKEN,Arc.FileName,FileName); - ErrHandler.SetErrorCode(RARX_CRC); - return; - } - - struct passwd *pw; - errno=0; // Required by getpwnam specification if we need to check errno. - if ((pw=getpwnam(Arc.UOHead.OwnerName))==NULL) - { - uiMsg(UIERROR_UOWNERGETOWNERID,Arc.FileName,GetWide(Arc.UOHead.OwnerName)); - ErrHandler.SysErrMsg(); - ErrHandler.SetErrorCode(RARX_WARNING); + if (memchr(&Arc.SubHead.SubData[0],0,Arc.SubHead.SubData.Size())==NULL) return; - } - uid_t OwnerID=pw->pw_uid; - - struct group *gr; - errno=0; // Required by getgrnam specification if we need to check errno. - if ((gr=getgrnam(Arc.UOHead.GroupName))==NULL) - { - uiMsg(UIERROR_UOWNERGETGROUPID,Arc.FileName,GetWide(Arc.UOHead.GroupName)); - ErrHandler.SysErrMsg(); - ErrHandler.SetErrorCode(RARX_CRC); - return; - } - uint Attr=GetFileAttr(FileName); - gid_t GroupID=gr->gr_gid; -#if defined(SAVE_LINKS) && !defined(_APPLE) - if (lchown(NameA,OwnerID,GroupID)!=0) -#else - if (chown(NameA,OwnerID,GroupID)!=0) -#endif - { - uiMsg(UIERROR_UOWNERSET,Arc.FileName,FileName); - ErrHandler.SetErrorCode(RARX_CREATE); - } - SetFileAttr(FileName,Attr); -} - - -void ExtractUnixOwner30(Archive &Arc,const wchar *FileName) -{ - char NameA[NM]; - WideToChar(FileName,NameA,ASIZE(NameA)); char *OwnerName=(char *)&Arc.SubHead.SubData[0]; int OwnerSize=strlen(OwnerName)+1; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/unrar/version.hpp new/unrar/version.hpp --- old/unrar/version.hpp 2023-01-24 17:25:32.000000000 +0100 +++ new/unrar/version.hpp 2023-05-29 18:05:18.000000000 +0200 @@ -1,6 +1,6 @@ #define RARVER_MAJOR 6 -#define RARVER_MINOR 21 -#define RARVER_BETA 1 -#define RARVER_DAY 24 -#define RARVER_MONTH 1 +#define RARVER_MINOR 22 +#define RARVER_BETA 0 +#define RARVER_DAY 29 +#define RARVER_MONTH 5 #define RARVER_YEAR 2023 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/unrar/win32lnk.cpp new/unrar/win32lnk.cpp --- old/unrar/win32lnk.cpp 2023-01-24 17:25:32.000000000 +0100 +++ new/unrar/win32lnk.cpp 2023-05-29 18:05:18.000000000 +0200 @@ -40,7 +40,7 @@ PrivSet=true; } - const DWORD BufSize=sizeof(REPARSE_DATA_BUFFER)+2*NM+1024; + const DWORD BufSize=sizeof(REPARSE_DATA_BUFFER)+2*NM*sizeof(wchar)+1024; Array<byte> Buf(BufSize); REPARSE_DATA_BUFFER *rdb=(REPARSE_DATA_BUFFER *)&Buf[0]; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/unrar/win32stm.cpp new/unrar/win32stm.cpp --- old/unrar/win32stm.cpp 2023-01-24 17:25:32.000000000 +0100 +++ new/unrar/win32stm.cpp 2023-05-29 18:05:18.000000000 +0200 @@ -39,6 +39,7 @@ CharToWide(Arc.StreamHead.StreamName,StoredName,ASIZE(StoredName)); ConvertPath(StoredName+1,StoredName+1,ASIZE(StoredName)-1); + wcsncatz(StreamName,StoredName,ASIZE(StreamName)); FindData fd;
