Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mpc-hc/mpc-hc.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorXhmikosR <xhmikosr@gmail.com>2014-11-03 20:58:35 +0300
committerXhmikosR <xhmikosr@gmail.com>2014-11-11 22:54:31 +0300
commit7c45b2cd031940bce1315f34a51424e9625b2080 (patch)
tree596ebb8dfd067e7f74229a0d2a29ceae4245e3f7
parentadf4331c84b71e130a0f7b260f7942b99ef2f3f7 (diff)
Update Unrar to v5.2.2.
-rw-r--r--docs/Changelog.txt2
-rw-r--r--src/thirdparty/unrar/arcread.cpp2
-rw-r--r--src/thirdparty/unrar/dll.rc8
-rw-r--r--src/thirdparty/unrar/extract.cpp16
-rw-r--r--src/thirdparty/unrar/file.cpp38
-rw-r--r--src/thirdparty/unrar/file.hpp8
-rw-r--r--src/thirdparty/unrar/filefn.cpp23
-rw-r--r--src/thirdparty/unrar/list.cpp4
-rw-r--r--src/thirdparty/unrar/version.hpp6
9 files changed, 65 insertions, 42 deletions
diff --git a/docs/Changelog.txt b/docs/Changelog.txt
index 1f957620c..132d7610b 100644
--- a/docs/Changelog.txt
+++ b/docs/Changelog.txt
@@ -21,7 +21,7 @@ next version - not released yet
* Ticket #4991, Text subtitles: "opaque box" outlines will now always be drawn even if the border width is set to 0.
The size of the text is independent of the border width so there is no reason not to draw that part
* Updated Little CMS to v2.7 (git 8174681)
-* Updated Unrar to v5.2.1
+* Updated Unrar to v5.2.2
* Updated LAV Filters to v0.63.0.2
* Updated Arabic, Armenian, Basque, Belarusian, Bengali, British English, Catalan, Chinese (Simplified and Traditional),
Croatian, Czech, Dutch, French, Galician, German, Greek, Hebrew, Hungarian, Italian, Japanese, Korean, Malay,
diff --git a/src/thirdparty/unrar/arcread.cpp b/src/thirdparty/unrar/arcread.cpp
index 284fa0c25..e4c3f87d5 100644
--- a/src/thirdparty/unrar/arcread.cpp
+++ b/src/thirdparty/unrar/arcread.cpp
@@ -811,7 +811,7 @@ size_t Archive::ReadHeader50()
Raw.GetB((byte *)FileName,ReadNameSize);
FileName[ReadNameSize]=0;
- UtfToWide(FileName,hd->FileName,ASIZE(hd->FileName)-1);
+ UtfToWide(FileName,hd->FileName,ASIZE(hd->FileName));
// Should do it before converting names, because extra fields can
// affect name processing, like in case of NTFS streams.
diff --git a/src/thirdparty/unrar/dll.rc b/src/thirdparty/unrar/dll.rc
index fe5cd4f06..4c378030b 100644
--- a/src/thirdparty/unrar/dll.rc
+++ b/src/thirdparty/unrar/dll.rc
@@ -2,8 +2,8 @@
#include <commctrl.h>
VS_VERSION_INFO VERSIONINFO
-FILEVERSION 5, 20, 1, 1376
-PRODUCTVERSION 5, 20, 1, 1376
+FILEVERSION 5, 20, 3, 1404
+PRODUCTVERSION 5, 20, 3, 1404
FILEOS VOS__WINDOWS32
FILETYPE VFT_APP
{
@@ -14,8 +14,8 @@ FILETYPE VFT_APP
VALUE "CompanyName", "Alexander Roshal\0"
VALUE "ProductName", "RAR decompression library\0"
VALUE "FileDescription", "RAR decompression library\0"
- VALUE "FileVersion", "5.20.1\0"
- VALUE "ProductVersion", "5.20.1\0"
+ VALUE "FileVersion", "5.20.3\0"
+ VALUE "ProductVersion", "5.20.3\0"
VALUE "LegalCopyright", "Copyright © Alexander Roshal 1993-2014\0"
VALUE "OriginalFilename", "Unrar.dll\0"
}
diff --git a/src/thirdparty/unrar/extract.cpp b/src/thirdparty/unrar/extract.cpp
index f2b695bf3..cab669fe9 100644
--- a/src/thirdparty/unrar/extract.cpp
+++ b/src/thirdparty/unrar/extract.cpp
@@ -50,6 +50,10 @@ void CmdExtract::DoExtract()
DataIO.ProcessedArcSize+=FD.Size;
}
+ // Clean user entered password. Not really required, just for extra safety.
+ if (Cmd->ManualPassword)
+ Cmd->Password.Clean();
+
if (TotalFileCount==0 && Cmd->Command[0]!='I' &&
ErrHandler.GetErrorCode()!=RARX_BADPWD) // Not in case of wrong archive password.
{
@@ -256,15 +260,11 @@ bool CmdExtract::ExtractCurrentFile(Archive &Arc,size_t HeaderSize,bool &Repeat)
int MatchNumber=Cmd->IsProcessFile(Arc.FileHead,&EqualNames,MatchType);
bool ExactMatch=MatchNumber!=0;
#ifndef SFX_MODULE
- if (*Cmd->ArcPath==0 && Cmd->ExclPath==EXCL_BASEPATH)
+ if (*Cmd->ArcPath==0 && Cmd->ExclPath==EXCL_BASEPATH && ExactMatch)
{
- *Cmd->ArcPath=0;
- if (ExactMatch)
- {
- Cmd->FileArgs.Rewind();
- if (Cmd->FileArgs.GetString(Cmd->ArcPath,ASIZE(Cmd->ArcPath),MatchNumber-1))
- *PointToName(Cmd->ArcPath)=0;
- }
+ Cmd->FileArgs.Rewind();
+ if (Cmd->FileArgs.GetString(Cmd->ArcPath,ASIZE(Cmd->ArcPath),MatchNumber-1))
+ *PointToName(Cmd->ArcPath)=0;
}
#endif
if (ExactMatch && !EqualNames)
diff --git a/src/thirdparty/unrar/file.cpp b/src/thirdparty/unrar/file.cpp
index 4c4b9485f..8fba34adb 100644
--- a/src/thirdparty/unrar/file.cpp
+++ b/src/thirdparty/unrar/file.cpp
@@ -2,7 +2,7 @@
File::File()
{
- hFile=BAD_HANDLE;
+ hFile=FILE_BAD_HANDLE;
*FileName=0;
NewFile=false;
LastWrite=false;
@@ -22,7 +22,7 @@ File::File()
File::~File()
{
- if (hFile!=BAD_HANDLE && !SkipClose)
+ if (hFile!=FILE_BAD_HANDLE && !SkipClose)
if (NewFile)
Delete();
else
@@ -59,7 +59,7 @@ bool File::Open(const wchar *Name,uint Mode)
hNewFile=CreateFile(Name,Access,ShareMode,NULL,OPEN_EXISTING,Flags,NULL);
DWORD LastError;
- if (hNewFile==BAD_HANDLE)
+ if (hNewFile==FILE_BAD_HANDLE)
{
LastError=GetLastError();
@@ -85,7 +85,7 @@ bool File::Open(const wchar *Name,uint Mode)
}
}
- if (hNewFile==BAD_HANDLE && LastError==ERROR_FILE_NOT_FOUND)
+ if (hNewFile==FILE_BAD_HANDLE && LastError==ERROR_FILE_NOT_FOUND)
ErrorType=FILE_NOTFOUND;
#else
int flags=UpdateMode ? O_RDWR:(WriteMode ? O_WRONLY:O_RDONLY);
@@ -112,7 +112,7 @@ bool File::Open(const wchar *Name,uint Mode)
}
#endif
if (handle==-1)
- hNewFile=BAD_HANDLE;
+ hNewFile=FILE_BAD_HANDLE;
else
{
#ifdef FILE_USE_OPEN
@@ -121,13 +121,13 @@ bool File::Open(const wchar *Name,uint Mode)
hNewFile=fdopen(handle,UpdateMode ? UPDATEBINARY:READBINARY);
#endif
}
- if (hNewFile==BAD_HANDLE && errno==ENOENT)
+ if (hNewFile==FILE_BAD_HANDLE && errno==ENOENT)
ErrorType=FILE_NOTFOUND;
#endif
NewFile=false;
HandleType=FILE_HANDLENORMAL;
SkipClose=false;
- bool Success=hNewFile!=BAD_HANDLE;
+ bool Success=hNewFile!=FILE_BAD_HANDLE;
if (Success)
{
hFile=hNewFile;
@@ -174,11 +174,11 @@ bool File::Create(const wchar *Name,uint Mode)
bool Special=*LastChar=='.' || *LastChar==' ';
if (Special)
- hFile=BAD_HANDLE;
+ hFile=FILE_BAD_HANDLE;
else
hFile=CreateFile(Name,Access,ShareMode,NULL,CREATE_ALWAYS,0,NULL);
- if (hFile==BAD_HANDLE)
+ if (hFile==FILE_BAD_HANDLE)
{
wchar LongName[NM];
if (GetWinLongPath(Name,LongName,ASIZE(LongName)))
@@ -190,6 +190,10 @@ bool File::Create(const wchar *Name,uint Mode)
WideToChar(Name,NameA,ASIZE(NameA));
#ifdef FILE_USE_OPEN
hFile=open(NameA,(O_CREAT|O_TRUNC) | (WriteMode ? O_WRONLY : O_RDWR));
+#ifdef _ANDROID
+ if (hFile==FILE_BAD_HANDLE)
+ hFile=JniCreateFile(Name); // If external card is read-only for usual file API.
+#endif
#else
hFile=fopen(NameA,WriteMode ? WRITEBINARY:CREATEBINARY);
#endif
@@ -198,7 +202,7 @@ bool File::Create(const wchar *Name,uint Mode)
HandleType=FILE_HANDLENORMAL;
SkipClose=false;
wcsncpyz(FileName,Name,ASIZE(FileName));
- return hFile!=BAD_HANDLE;
+ return hFile!=FILE_BAD_HANDLE;
}
@@ -224,7 +228,7 @@ bool File::Close()
{
bool Success=true;
- if (hFile!=BAD_HANDLE)
+ if (hFile!=FILE_BAD_HANDLE)
{
if (!SkipClose)
{
@@ -241,7 +245,7 @@ bool File::Close()
#endif
#endif
}
- hFile=BAD_HANDLE;
+ hFile=FILE_BAD_HANDLE;
}
HandleType=FILE_HANDLENORMAL;
if (!Success && AllowExceptions)
@@ -254,7 +258,7 @@ bool File::Delete()
{
if (HandleType!=FILE_HANDLENORMAL)
return false;
- if (hFile!=BAD_HANDLE)
+ if (hFile!=FILE_BAD_HANDLE)
Close();
if (!AllowDelete)
return false;
@@ -287,7 +291,7 @@ void File::Write(const void *Data,size_t Size)
hFile=GetStdHandle(STD_OUTPUT_HANDLE);
#else
// Cannot use the standard stdout here, because it already has wide orientation.
- if (hFile==BAD_HANDLE)
+ if (hFile==FILE_BAD_HANDLE)
{
#ifdef FILE_USE_OPEN
hFile=dup(STDOUT_FILENO); // Open new stdout stream.
@@ -465,7 +469,7 @@ void File::Seek(int64 Offset,int Method)
bool File::RawSeek(int64 Offset,int Method)
{
- if (hFile==BAD_HANDLE)
+ if (hFile==FILE_BAD_HANDLE)
return true;
if (Offset<0 && Method!=SEEK_SET)
{
@@ -496,7 +500,7 @@ bool File::RawSeek(int64 Offset,int Method)
int64 File::Tell()
{
- if (hFile==BAD_HANDLE)
+ if (hFile==FILE_BAD_HANDLE)
if (AllowExceptions)
ErrHandler.SeekError(FileName);
else
@@ -647,7 +651,7 @@ int64 File::FileLength()
bool File::IsDevice()
{
- if (hFile==BAD_HANDLE)
+ if (hFile==FILE_BAD_HANDLE)
return false;
#ifdef _WIN_ALL
uint Type=GetFileType(hFile);
diff --git a/src/thirdparty/unrar/file.hpp b/src/thirdparty/unrar/file.hpp
index 350537a05..93aac89f3 100644
--- a/src/thirdparty/unrar/file.hpp
+++ b/src/thirdparty/unrar/file.hpp
@@ -7,13 +7,13 @@
#ifdef _WIN_ALL
typedef HANDLE FileHandle;
- #define BAD_HANDLE INVALID_HANDLE_VALUE
+ #define FILE_BAD_HANDLE INVALID_HANDLE_VALUE
#elif defined(FILE_USE_OPEN)
typedef off_t FileHandle;
- #define BAD_HANDLE -1
+ #define FILE_BAD_HANDLE -1
#else
typedef FILE* FileHandle;
- #define BAD_HANDLE NULL
+ #define FILE_BAD_HANDLE NULL
#endif
class RAROptions;
@@ -94,7 +94,7 @@ class File
void SetCloseFileTime(RarTime *ftm,RarTime *fta=NULL);
static void SetCloseFileTimeByName(const wchar *Name,RarTime *ftm,RarTime *fta);
void GetOpenFileTime(RarTime *ft);
- bool IsOpened() {return hFile!=BAD_HANDLE;};
+ bool IsOpened() {return hFile!=FILE_BAD_HANDLE;};
int64 FileLength();
void SetHandleType(FILE_HANDLETYPE Type) {HandleType=Type;}
FILE_HANDLETYPE GetHandleType() {return HandleType;}
diff --git a/src/thirdparty/unrar/filefn.cpp b/src/thirdparty/unrar/filefn.cpp
index e1baca9ab..6526f4337 100644
--- a/src/thirdparty/unrar/filefn.cpp
+++ b/src/thirdparty/unrar/filefn.cpp
@@ -29,6 +29,10 @@ MKDIR_CODE MakeDir(const wchar *Name,bool SetAttr,uint Attr)
WideToChar(Name,NameA,ASIZE(NameA));
mode_t uattr=SetAttr ? (mode_t)Attr:0777;
int ErrCode=mkdir(NameA,uattr);
+#ifdef _ANDROID
+ if (ErrCode==-1 && errno!=ENOENT)
+ ErrCode=JniMkdir(Name) ? 0 : -1; // If external card is read-only for usual file API.
+#endif
if (ErrCode==-1)
return errno==ENOENT ? MKDIR_BADPATH:MKDIR_ERROR;
return MKDIR_SUCCESS;
@@ -58,8 +62,9 @@ bool CreatePath(const wchar *Path,bool SkipLastName)
break;
// Process all kinds of path separators, so user can enter Unix style
- // path in Windows or Windows in Unix.
- if (IsPathDiv(*s))
+ // path in Windows or Windows in Unix. s>Path check avoids attempting
+ // creating an empty directory for paths starting from path separator.
+ if (IsPathDiv(*s) && s>Path)
{
#ifdef _WIN_ALL
// We must not attempt to create "D:" directory, because first
@@ -411,7 +416,12 @@ bool RenameFile(const wchar *SrcName,const wchar *DestName)
char SrcNameA[NM],DestNameA[NM];
WideToChar(SrcName,SrcNameA,ASIZE(SrcNameA));
WideToChar(DestName,DestNameA,ASIZE(DestNameA));
- return rename(SrcNameA,DestNameA)==0;
+ bool Success=rename(SrcNameA,DestNameA)==0;
+#ifdef _ANDROID
+ if (!Success)
+ Success=JniRename(SrcName,DestName); // If external card is read-only for usual file API.
+#endif
+ return Success;
#endif
}
@@ -430,7 +440,12 @@ bool DelFile(const wchar *Name)
#else
char NameA[NM];
WideToChar(Name,NameA,ASIZE(NameA));
- return remove(NameA)==0;
+ bool Success=remove(NameA)==0;
+#ifdef _ANDROID
+ if (!Success)
+ Success=JniDelete(Name);
+#endif
+ return Success;
#endif
}
diff --git a/src/thirdparty/unrar/list.cpp b/src/thirdparty/unrar/list.cpp
index 5825c7bf5..d64e274a6 100644
--- a/src/thirdparty/unrar/list.cpp
+++ b/src/thirdparty/unrar/list.cpp
@@ -165,6 +165,10 @@ void ListArchive(CommandData *Cmd)
}
}
+ // Clean user entered password. Not really required, just for extra safety.
+ if (Cmd->ManualPassword)
+ Cmd->Password.Clean();
+
if (ArcCount>1 && !Bare && !Technical)
{
wchar UnpSizeText[20],PackSizeText[20];
diff --git a/src/thirdparty/unrar/version.hpp b/src/thirdparty/unrar/version.hpp
index a70850bb9..0d4175c5c 100644
--- a/src/thirdparty/unrar/version.hpp
+++ b/src/thirdparty/unrar/version.hpp
@@ -1,6 +1,6 @@
#define RARVER_MAJOR 5
#define RARVER_MINOR 20
-#define RARVER_BETA 1
-#define RARVER_DAY 6
-#define RARVER_MONTH 10
+#define RARVER_BETA 3
+#define RARVER_DAY 3
+#define RARVER_MONTH 11
#define RARVER_YEAR 2014