summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--include/m_protosvc.h3
-rw-r--r--include/m_utils.h4
-rw-r--r--libs/win32/mir_core.libbin492938 -> 493690 bytes
-rw-r--r--libs/win64/mir_core.libbin498166 -> 498930 bytes
-rw-r--r--src/mir_app/src/file.h4
-rw-r--r--src/mir_app/src/fileutils.cpp6
-rw-r--r--src/mir_app/src/srmm_util.cpp7
-rw-r--r--src/mir_core/src/Windows/fileutil.cpp19
-rw-r--r--src/mir_core/src/mir_core.def2
-rw-r--r--src/mir_core/src/mir_core64.def2
10 files changed, 41 insertions, 6 deletions
diff --git a/include/m_protosvc.h b/include/m_protosvc.h
index 5941bbe213..80cc51026d 100644
--- a/include/m_protosvc.h
+++ b/include/m_protosvc.h
@@ -32,6 +32,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
#define M_PROTOSVC_H__ 1
#include "m_protocols.h"
+#include "m_utils.h"
/////////////////////////////////////////////////////////////////////////////////////////
// WARNING:
@@ -811,7 +812,7 @@ struct MIR_APP_EXPORT OFDTHREAD : public MNonCopyable
void ResetFileName(const wchar_t *pwszNewName);
MEVENT hDbEvent;
- CMStringW wszPath;
+ MFilePath wszPath;
bool bOpen;
};
diff --git a/include/m_utils.h b/include/m_utils.h
index 2ea38f07b4..1050964d93 100644
--- a/include/m_utils.h
+++ b/include/m_utils.h
@@ -305,7 +305,11 @@ public:
MFilePath(): CMStringW() {}
MFilePath(const wchar_t *init) : CMStringW(init) {}
+ CMStringW getExtension() const;
+
+ bool isExecutable() const;
bool isExist() const;
+
bool move(const wchar_t *pwszDest);
MFileIterator search();
diff --git a/libs/win32/mir_core.lib b/libs/win32/mir_core.lib
index 1f4814a4a4..71763dc161 100644
--- a/libs/win32/mir_core.lib
+++ b/libs/win32/mir_core.lib
Binary files differ
diff --git a/libs/win64/mir_core.lib b/libs/win64/mir_core.lib
index 610b93d615..13533c8cde 100644
--- a/libs/win64/mir_core.lib
+++ b/libs/win64/mir_core.lib
Binary files differ
diff --git a/src/mir_app/src/file.h b/src/mir_app/src/file.h
index 6689b3ceac..0a29ec5d85 100644
--- a/src/mir_app/src/file.h
+++ b/src/mir_app/src/file.h
@@ -136,8 +136,8 @@ void UpdateProtoFileTransferStatus(PROTOFILETRANSFERSTATUS *dest, PROTOFILETRANS
wchar_t *PFTS_StringToTchar(int flags, const MAllStrings s);
int PFTS_CompareWithTchar(PROTOFILETRANSFERSTATUS *ft, const MAllStrings s, wchar_t *r);
-CMStringW CreateUniqueFileName(const wchar_t *pszOriginalFile);
-CMStringW FindUniqueFileName(const wchar_t *pszOriginalFile);
+MFilePath CreateUniqueFileName(const wchar_t *pszOriginalFile);
+MFilePath FindUniqueFileName(const wchar_t *pszOriginalFile);
int GetRegValue(HKEY hKeyBase, const wchar_t *szSubKey, const wchar_t *szValue, wchar_t *szOutput, int cbOutput);
void GetSensiblyFormattedSize(__int64 size, wchar_t *szOut, int cchOut, int unitsOverride, int appendUnits, int *unitsUsed);
diff --git a/src/mir_app/src/fileutils.cpp b/src/mir_app/src/fileutils.cpp
index c395710270..642571009b 100644
--- a/src/mir_app/src/fileutils.cpp
+++ b/src/mir_app/src/fileutils.cpp
@@ -150,7 +150,7 @@ void FreeProtoFileTransferStatus(PROTOFILETRANSFERSTATUS *fts)
/////////////////////////////////////////////////////////////////////////////////////////
-CMStringW CreateUniqueFileName(const wchar_t *pszOriginalFile)
+MFilePath CreateUniqueFileName(const wchar_t *pszOriginalFile)
{
const wchar_t *pszExtension, *pszFilename;
if ((pszFilename = wcsrchr(pszOriginalFile, '\\')) == nullptr)
@@ -158,7 +158,7 @@ CMStringW CreateUniqueFileName(const wchar_t *pszOriginalFile)
if ((pszExtension = wcsrchr(pszFilename + 1, '.')) == nullptr)
pszExtension = pszFilename + mir_wstrlen(pszFilename);
- CMStringW buf;
+ MFilePath buf;
for (int i = 1;; i++) {
buf.Format(L"%.*s (%d)%s", unsigned(pszExtension - pszOriginalFile), pszOriginalFile, i, pszExtension);
if (_waccess(buf, 0) != 0)
@@ -167,7 +167,7 @@ CMStringW CreateUniqueFileName(const wchar_t *pszOriginalFile)
return buf;
}
-CMStringW FindUniqueFileName(const wchar_t *pszOriginalFile)
+MFilePath FindUniqueFileName(const wchar_t *pszOriginalFile)
{
if (_waccess(pszOriginalFile, 0))
return pszOriginalFile;
diff --git a/src/mir_app/src/srmm_util.cpp b/src/mir_app/src/srmm_util.cpp
index ccb562226e..33ca91f902 100644
--- a/src/mir_app/src/srmm_util.cpp
+++ b/src/mir_app/src/srmm_util.cpp
@@ -120,6 +120,13 @@ void OFDTHREAD::Finish()
dbv.pwszVal = wszPath.GetBuffer();
db_event_setJson(hDbEvent, "lf", &dbv);
+ // if the file is executable, protect it from automatic opening
+ if (wszPath.isExecutable())
+ if (FILE *out = _wfopen(wszPath + L":Zone.Identifier", L"wt")) {
+ fputs("[ZoneTransfer]\r\nZoneId = 3\r\n", out);
+ fclose(out);
+ }
+
NotifyEventHooks(g_hevEventEdited, db_event_getContact(hDbEvent), hDbEvent);
if (bOpen)
diff --git a/src/mir_core/src/Windows/fileutil.cpp b/src/mir_core/src/Windows/fileutil.cpp
index a7494bc8b7..9bf0baced6 100644
--- a/src/mir_core/src/Windows/fileutil.cpp
+++ b/src/mir_core/src/Windows/fileutil.cpp
@@ -62,6 +62,25 @@ bool MFilePath::MFileIterator::isDir() const
/////////////////////////////////////////////////////////////////////////////////////////
+CMStringW MFilePath::getExtension() const
+{
+ int idx = ReverseFind('.');
+ return (idx == -1) ? L"" : Right(GetLength() - idx - 1);
+}
+
+bool MFilePath::isExecutable() const
+{
+ CMStringW wszExt = getExtension(), wszEnv;
+ wszExt.MakeUpper();
+ wszEnv.GetEnvironmentVariableW(L"PATHEXT");
+
+ for (auto *p = wcstok(wszEnv.GetBuffer(), L";"); p; p = wcstok(0, L";"))
+ if (wszExt == p + 1)
+ return true;
+
+ return false;
+}
+
bool MFilePath::isExist() const
{
return _waccess(c_str(), 0) == 0;
diff --git a/src/mir_core/src/mir_core.def b/src/mir_core/src/mir_core.def
index af4fbd0c30..ca83dabb82 100644
--- a/src/mir_core/src/mir_core.def
+++ b/src/mir_core/src/mir_core.def
@@ -1558,3 +1558,5 @@ db_event_updateId @1772
??_7MShareable@@6B@ @1779 NONAME
?Acquire@MShareable@@QAEXXZ @1780 NONAME
?Release@MShareable@@QAEXXZ @1781 NONAME
+?getExtension@MFilePath@@QBE?AV?$CMStringT@_WV?$ChTraitsCRT@_W@@@@XZ @1782 NONAME
+?isExecutable@MFilePath@@QBE_NXZ @1783 NONAME
diff --git a/src/mir_core/src/mir_core64.def b/src/mir_core/src/mir_core64.def
index c071152ab3..da3b919a84 100644
--- a/src/mir_core/src/mir_core64.def
+++ b/src/mir_core/src/mir_core64.def
@@ -1558,3 +1558,5 @@ db_event_updateId @1772
??_7MShareable@@6B@ @1779 NONAME
?Acquire@MShareable@@QEAAXXZ @1780 NONAME
?Release@MShareable@@QEAAXXZ @1781 NONAME
+?getExtension@MFilePath@@QEBA?AV?$CMStringT@_WV?$ChTraitsCRT@_W@@@@XZ @1782 NONAME
+?isExecutable@MFilePath@@QEBA_NXZ @1783 NONAME