michaellukashov / Far-NetBox

SFTP/SCP/FTP/FTPS/WebDAV/S3 client for Far Manager 3 (http://farmanager.com/)
https://forum.farmanager.com/viewtopic.php?t=6317
GNU General Public License v2.0
158 stars 52 forks source link

Несколько ошибок в коде #241

Closed 9-11 closed 7 years ago

9-11 commented 7 years ago

По поводу отвалившейся возможности исполнять команды - баги #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.

VictorVG commented 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:

VictorVG commented 7 years ago

FarNetBox-2.4.3.505_Far3_x64_fix.7z FarNetBox-2.4.3.505_Far3_x86_fix.7z

VictorVG commented 7 years ago

Fixed