Closed 9-11 closed 7 years ago
Есть такое. Спасибо! Фиксится даже проще:
--- ./src/NetBox/FarPlugin.cpp Tue May 30 13:52:27 2017 Git-0ce19205e8
+++ ./src/NetBox/FarPlugin.cpp Thu Jun 29 15:41:59 2017 Fix
@@ -520,9 +520,10 @@
DebugAssert(FOpenedPlugins->IndexOf(FarFileSystem) != NPOS);
void *Param = Info->Param;
+ UnicodeString Buf;
if ((Info->Event == FE_CHANGEVIEWMODE) || (Info->Event == FE_COMMAND))
{
- UnicodeString Buf = static_cast<wchar_t *>(Info->Param);
+ Buf = static_cast<wchar_t *>(Info->Param);
Param = const_cast<void *>(reinterpret_cast<const void *>(Buf.c_str()));
}
Собрал, проверил на FTP и WebDAV (YD). :+1:
Fixed
По поводу отвалившейся возможности исполнять команды - баги #240, #239, #237 В коммите 0aa8d1cef2ae030d0673eb44e2a951e7a9049d40 были внесены фиксы, которые не работают.
Например, в строках 519-523
if ((Event == FE_CHANGEVIEWMODE) || (Event == FE_COMMAND))
{
UnicodeString Buf = static_cast<wchar_t *>(Param);
Param = const_cast<void *>(reinterpret_cast<const void *>(Buf.c_str()));
}
переменнаяParam
ссылается на значение переменнойBuf
, которая уничтожается по выходу из области видимости оператораif
, но при этомParam
продолжает использоваться вне области. Чтобы пофиксить, нужно вынести объявление переменнойBuf
за пределы оператораif
.То же самое происходит в функции
TCustomFarPlugin::OpenPlugin
в строках 310-314.