#11
|
|||
|
|||
Re: Заезды по памяти по F1
Vitaliy Aksyonov написал(а) к Nil A в Oct 23 22:25:54 по местному времени:
Привет, Nil! 28 Oct 23 06:38, ты писал(а) мне: NA>>>> Как-как, заходим по F1, читаем там, а потом по ESC выходим, и NA>>>> тут то санитайзер и срабатывает NA>>>> ==6255==ERROR: AddressSanitizer: heap-use-after-free on address NA>>>> 0x60800001226c at pc 0x000000b4c1d5 bp 0x7ffdfdc2f5b0 sp NA>>>> 0x7ffdfdc2f5a8 READ of size 2 at 0x60800001226c thread T0 NA>>>> #0 0xb4c1d4 in getxch(int) NA>>>> /home/fido/src/golded-plus/goldlib/gcui/gkbdgetm.cpp:319 NA>>>> #1 0xb81225 in wmenuget() NA>>> [бла..бла..бла] NA>>> - setonkey(KeyEsc,escesc,0); NA>>> + setonkey(Key_Esc,NULL,0); VA>> То есть ты просто отключил обработчики этих клавиш? Отличный VA>> фикс! NA> Да, никрута так фиксить, конечно, подловил. Бывает. Четыре глаза - оно всегда лучше двух. :) NA> Тогда вот так пофиксю, вольёшь? NA> diff --git a/goldlib/gcui/gkbdgetm.cpp b/goldlib/gcui/gkbdgetm.cpp NA> --- a/goldlib/gcui/gkbdgetm.cpp NA> +++ b/goldlib/gcui/gkbdgetm.cpp NA> @@ -310,6 +310,7 @@ gkey getxch(int tick) NA> if(gkbd->inmenu and gmou.FreeCursor()) NA> return 0; NA> #endif NA> + _onkey = gkbd->onkey; NA> break; NA> } NA> onkey = onkey->prev; NA> Глобальные переменные - это зло. огда мы отрабатываем клавишу ESC, то NA> esc_esc() вычистит себя, и doubly-linked list останется пустым, т.е. NA> gkbd->onkey уже освобождённым оказывается. Можешь вкратце описать, в чём проблема и как твой фикс её решает? Патч подготовлю. Best regards, Vitaliy Aksyonov. ... Трудись, трудись, труд из тебя человека сделает! --- GoldED+/LNX 1.1.5-b20231021 |
#12
|
|||
|
|||
Заезды по памяти по F1
Nil A написал(а) к Vitaliy Aksyonov в Oct 23 08:27:04 по местному времени:
Нello, Vitaliy! Friday October 27 2023 22:25, from Vitaliy Aksyonov -> Nil A: NA>> diff --git a/goldlib/gcui/gkbdgetm.cpp NA>> b/goldlib/gcui/gkbdgetm.cpp NA>> --- a/goldlib/gcui/gkbdgetm.cpp NA>> +++ b/goldlib/gcui/gkbdgetm.cpp NA>> @@ -310,6 +310,7 @@ gkey getxch(int tick) NA>> if(gkbd->inmenu and gmou.FreeCursor()) NA>> return 0; NA>> #endif NA>> + _onkey = gkbd->onkey; NA>> break; NA>> } NA>> onkey = onkey->prev; NA>> Глобальные переменные - это зло. огда мы отрабатываем клавишу NA>> ESC, то esc_esc() вычистит себя, и doubly-linked list останется NA>> пустым, т.е. gkbd->onkey уже освобождённым оказывается. VA> Можешь вкратце описать, в чём проблема и как твой фикс её решает? Патч VA> подготовлю. gkbd - глобальный объект для работы с вводом. Синглтон напрашивается, но тут просто глобал. gkbd->onkey - doubly linked list какие мы готовы обрабатывать клавиши с их колбеками. Там цикл по этому листу, если совпало, то вызываем колбек. Проблема случается в F1 помощи, если нажимать pageup, pagedown, esc клавиши. Запуститься их обработчик, например, escesc(), который первым делом вызовет setonkey(KeyEsc,NULL,0) и уберёт себя из этого linked list. Далее там в getxch() стоит break после обработки, а потом if, чтобы key to pass back, 0=don't pass. Главное, что в этом месте esc_esc() был единственным в linked list, поэтому он весь и освобождается, считай весь gkbd->onkey nullptr. Это ещё Одинновский баг там похоже. Ни у кого не падает, потому что освобождается и тут же используется снова, там просто других маллоков нет рядом, поэтому память не трогается никем больше. Best Regards, Nil --- GoldED+/LNX 1.1.5 |
#13
|
|||
|
|||
Заезды по памяти по F1
Nil A написал(а) к Vitaliy Aksyonov в Oct 23 08:59:34 по местному времени:
Нello, Vitaliy! Saturday October 28 2023 08:27, from Nil A -> Vitaliy Aksyonov: NA>>> diff --git a/goldlib/gcui/gkbdgetm.cpp NA>>> b/goldlib/gcui/gkbdgetm.cpp NA>>> --- a/goldlib/gcui/gkbdgetm.cpp NA>>> +++ b/goldlib/gcui/gkbdgetm.cpp NA>>> @@ -310,6 +310,7 @@ gkey getxch(int tick) NA>>> if(gkbd->inmenu and gmou.FreeCursor()) NA>>> return 0; NA>>> #endif NA>>> + _onkey = gkbd->onkey; NA>>> break; NA>>> } NA>>> onkey = onkey->prev; NA>>> Глобальные переменные - это зло. огда мы отрабатываем клавишу NA>>> ESC, то esc_esc() вычистит себя, и doubly-linked list останется NA>>> пустым, т.е. gkbd->onkey уже освобождённым оказывается. VA>> Можешь вкратце описать, в чём проблема и как твой фикс её решает? VA>> Патч подготовлю. NA> gkbd - глобальный объект для работы с вводом. Синглтон напрашивается, NA> но тут просто глобал. gkbd->onkey - doubly linked list какие мы готовы NA> обрабатывать клавиши с их колбеками. Там цикл по этому листу, если NA> совпало, то вызываем колбек. Проблема случается в F1 помощи, если NA> нажимать pageup, pagedown, esc клавиши. Запуститься их обработчик, NA> например, esc_esc(), который первым делом вызовет NA> setonkey(Key_Esc,NULL,0) и уберёт себя из этого linked list. Далее там NA> в getxch() стоит break после обработки, а потом if, чтобы key to pass NA> back, 0=don't pass. Я немного соврал. Падает на ESC, потому что он себя из списка вынимает, и эта такущая _onkey становится уже освобождённой. Мой фикс на начало линкед-листа переходит. Может быть это и не правильно. Best Regards, Nil --- GoldED+/LNX 1.1.5 |