Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

tmppanel: fixes, improvements, refactoring #2533

Open
wants to merge 14 commits into
base: master
Choose a base branch
from

Conversation

spnethw
Copy link
Contributor

@spnethw spnethw commented Nov 28, 2024

1. Багфикс парсинга параметров командной строки: fix #2518
Источником проблемы является фрагмент:

StrBuf tmpTMP(k + 1);
TCHAR *TMP = tmpTMP;
lstrcpyn(TMP, argv - k, k + 1);
for (int i = 0; i < OPT_COUNT; i++)
if (lstrcmpi(TMP + 1, ParamsStr[i]) == 0)
*(int *)ParamsOpt[i] = *TMP == _T('+');

В 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

@spnethw spnethw changed the title Tmppanel fixes improvements refactoring tmppanel: fixes, improvements, refactoring Nov 28, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

tmppanel: some command-line options do not work under certain conditions.
1 participant