diff options
-rw-r--r-- | include/m_protosvc.h | 3 | ||||
-rw-r--r-- | include/m_utils.h | 4 | ||||
-rw-r--r-- | libs/win32/mir_core.lib | bin | 492938 -> 493690 bytes | |||
-rw-r--r-- | libs/win64/mir_core.lib | bin | 498166 -> 498930 bytes | |||
-rw-r--r-- | src/mir_app/src/file.h | 4 | ||||
-rw-r--r-- | src/mir_app/src/fileutils.cpp | 6 | ||||
-rw-r--r-- | src/mir_app/src/srmm_util.cpp | 7 | ||||
-rw-r--r-- | src/mir_core/src/Windows/fileutil.cpp | 19 | ||||
-rw-r--r-- | src/mir_core/src/mir_core.def | 2 | ||||
-rw-r--r-- | src/mir_core/src/mir_core64.def | 2 |
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 Binary files differindex 1f4814a4a4..71763dc161 100644 --- a/libs/win32/mir_core.lib +++ b/libs/win32/mir_core.lib diff --git a/libs/win64/mir_core.lib b/libs/win64/mir_core.lib Binary files differindex 610b93d615..13533c8cde 100644 --- a/libs/win64/mir_core.lib +++ b/libs/win64/mir_core.lib 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
|