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

Падение при последовательном изменении файла по Alt-F4 #245

Closed 9-11 closed 7 years ago

9-11 commented 7 years ago

Чтобы воспроизвести падение:

  1. Заходим на сервер по FTP или SCP
  2. Открываем тестовый файл на сервере во внешнем редакторе (Alt-F4), изменяем, сохраняем
  3. Снова открываем тот же файл во внешнем редакторе по Alt-F4. В этот момент происходит падение Если между пунктом 2 и 3 принудительно обновить панель (Ctrl-R), то падения на втором открытии не происходит.

Причина в следующем. Far хранит список элементов панели плагина. Каждый элемент имеет поле PluginPanelItem.UserData.Data, в котором NetBox хранит соответствующий этому элементу объект TRemoteFile. После сохранения файла в пункте 2, NetBox перечитывает директорию, удаляя старые объекты TRemoteFile и создавая новые. Но Far не обновляет список элементов панели, поэтому при новом открытии файла (пункт 3) NetBox пытается использовать старый указатель из PluginPanelItem.UserData.Data, который уже освобождён.

Возможный фикс состоит в том, чтобы вставить в самый конец функции intptr_t TWinSCPFileSystem::UploadFiles(bool Move, OPERATION_MODES OpMode, bool Edit, UnicodeString & DestPath) вызов UpdatePanel():

intptr_t TWinSCPFileSystem::UploadFiles(bool Move, OPERATION_MODES OpMode, bool Edit, UnicodeString & DestPath) { ... +UpdatePanel(); return Result; }

VictorVG commented 7 years ago

Diff:

--- ./src/NetBox/WinSCPFileSystem.cpp   Git-bbf271c03814c04cffe5f73454bdc8300a887e11
+++ ./src/NetBox/WinSCPFileSystem.cpp   Wed Jul 05 16:10:08 2017
@@ -2743,6 +2743,7 @@
   {
     Result = -1;
   }
+  UpdatePanel();
   return Result;
 }

Соберу, перепроверю. Не собрался по моей вине (и я зря коммент удалил :( ).

VictorVG commented 7 years ago

О! Порядок в танковых войсках! Не падает. Проверял на Notepad через ассоцииаци

1

NetBox_2.4.3.509_x86_AMD64_fix.zip

Можно фикс коммитить.

VictorVG commented 7 years ago

Версию 2.4.3.510 x86 и x64 собрал и выложил в ./Far3

VictorVG commented 7 years ago

FIXED