tmppanel: fixes, improvements, refactoring #2533
Open
+124
−173
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
1. Багфикс парсинга параметров командной строки: fix #2518
Источником проблемы является фрагмент:
far2l/tmppanel/src/TmpPanel.cpp
Lines 96 to 102 in 63ae9f6
В
tmpTMP
копируется подстрока изargv
, не содержащая завершающий'\0'
(на его месте — пробел). Это приводит к некорректному сравнению функциейlstrcmpi
из-за выхода за пределы буфера.2. Реализован функционал OpenPanelFromOutput().
Загрузка результатов выполнения команды во временную панель или меню, например:
tmp:<ls -1a
Из оригинальных фич плагина пока не реализовано произвольное задание рабочего каталога, т.е. такая команда не сработает:
tmp:<|/bin|ls -1a
(впрочем, описание такого синтаксиса в хелпе отсутствует).
Сделано по аналогии с #2361.
3. Исправлены утечки памяти и вызовы free с неинициализированным аргументом,
возникающие при передаче (1, 2) в метод GetFileInfoAndValidate() локального экземпляра структуры FAR_FIND_DATA. Поскольку GetFileInfoAndValidate() устанавливает (1, 2) значение второго аргумента вызовом функции WFD2FFD(), в полях
lpwszFileName
локальных переменных TempFindData и FindData окажутся строки с выделенной malloc'ом памятью, указатели на которые сразу же будут утеряны. В редком случае (если именем файла окажется "/") будет произведена попытка вызова free с неинициализированным аргументом.4. Реализован функционал ShellExecute в функции ShowMenuFromList() (срабатывает при нажатии
Shift+Enter
).5. Рефакторинг метода TmpPanel::GetFileInfoAndValidate(), исправлена интерпретация директории "/", удалены goto и немного сокращен код.
6. Исправлено копирование имён файлов на панель с другой временной панели, решение адаптировано из FarGroup/FarManager@ce6e0dd
7. Исправлен прыжок курсора на .. после выхода из панели, решение адаптировано из FarGroup/FarManager@9f966d0