Macro Browser: Full management (Add, Edit, Delete, Enable/Disabled)#3416
Macro Browser: Full management (Add, Edit, Delete, Enable/Disabled)#3416akruphi wants to merge 1 commit into
Conversation
Off-by-one bug:
|
|
@michaellukashov огромное спасибо за натравливание разумной нейронки на код. Все основные замечания поправил.
Поправлено: как предложено
Поправлено: как предложено
Поправлено: в диалог редактирования добавлена галочка "[ ] Macro Active"
Поправлено: перед всеми изменяющими действиями сейчас проверка
Многоязыковость сейчас специально не доделана - немного позже, когда станет ясно,
В этом PR в древнем коде я специально ничего не менял.
О! Точно. Есть же |
Видимо здесь должно быть |
Точно! Большое спасибо. Поправил. |
1. BLOCKER: free on value-pointer when BufferSize == 1 — crash on duplicate / error pathsFile: far2l/src/macro/macro.cpp (new MacroReplaceAdd) if (mr.BufferSize > 1)
free(mr.Buffer);Or, better, extract a small helper that mirrors the ownership semantics used in __parseMacroString. 2. MAJOR: Dialog layout overlap — active-panel "Selection" checkbox placed on wrong rowFile: far2l/src/macro/macrobrowser.cpp
The ASCII art comment in the source shows row 16 for selection, but the code places it on row 15. This causes the selection checkbox to overlap the 3. MAJOR: Null dereference on pstrKeyName in DN_CLOSEFile: far2l/src/macro/macrobrowser.cpp (new MacroEditDlgProc) const wchar_t *pstrKeyName = (const wchar_t*)SendDlgMessage(hDlg, DM_GETCONSTTEXTPTR, ME_EDIT_KEY, 0);
if (*pstrKeyName == 0 || *(pstrKeyName + wcsspn(pstrKeyName, L" \t\n\r\f\v")) == 0) {DM_GETCONSTTEXTPTR can return nullptr in some dialog states (empty edit control, control not yet initialized). Dereferencing without a null check is if (!pstrKeyName || *pstrKeyName == 0 || ...)File: far2l/src/macro/macro.hpp, macro.cpp 5. MINOR: Duplicate check misses disabled macrosFile: far2l/src/macro/macro.cpp (MacroReplaceAdd) |
Поправлено: как предложено - добавил везде проверку
Поправлено: как предложено
Поправлено: как предложено
Разумно. Поставил проверку
Поправлено: проще оказалось отказаться от использования @michaellukashov Спасибо за замечания. 1, 4 и 5 реально баги, вылезшие из-за недостаточного моего внимания и вникания в логику текущего древнего кода. Просьба приносить ещё, если что заметится. |
92944f5 to
578fe67
Compare
|
Critical: MacroReplaceAdd fails when adding a new macro that reuses a key from a previously deleted macro.
Important: Duplicate-key loop finds the last match instead of the first.
FYI: View() prints mr->Description via %ls without null-check.
|
Поправлено: как предложено
Поправлено: как предложено
При выводе через |
|
Удобное! Замеченные баги:
|
|
@spnethw все перечисленные баги исходят из текущей логики древнего кода - поправим, но не сейчас. В текущем PR я специально никак не лезу в существующий код, чтобы случайно не испортить - уж больно там закручено и я не уверен, что всех заложенных древними драконов и вывертов осознал. Текущий PR - это пока продвинутый прототип, где главное понять, что взаимодействие с макроподситемой во всех случаях корректно и ничего не ломает. 1 и 2 - это надо в 3 - связано с логикой |
|
Добавлено в редактирование изменение флага макросов Заменено в диалоге редактирования для Последовательности По совету @exkrexpexfex в dialog.cpp для Выяснилось, что сейчас у @michaellukashov просьба по возможности текущий вариант также прогнать через Вашу AI - вдруг что ещё нейронка посоветует дельного. |
#1:
|
d43ed37 to
ff6f182
Compare
|
Вроде уже удобно рабочее и возможные некорректности и утечки памяти выловлены. Большое спасибо @michaellukashov и @exkrexpexfex за советы и выверку кода. Что осталось (но это точно уже за рамками этого PR и так набралось изменений выносящих мозг 🤯):
|
7af666c to
967e28a
Compare
Thanks to @michaellukashov for helping to find bugs and @exkrexpexfex for DI_MEMOEDIT advices.
Просьба к пользователям и знатокам макросистемы far2 (@shmuz @bigvax @michel-nk и всем остальным) высказаться не забыта ли какая особенность макросов, а также насколько удобна и корректна работа.
@elfmz вроде всё рабочее и можно мержить. Однако совсем навороченные макросы я не гоняю, поэтому полноценную многоязычность и помощь сделаю позже - вдруг укажут на недостатки и придется корректировать диалоги/сообщения.