forum.wfido.ru  

Вернуться   forum.wfido.ru > Прочие эхи > RU.GOLDED

Ответ
 
Опции темы Опции просмотра
  #11  
Старый 28.10.2023, 08:30
Vitaliy Aksyonov
Guest
 
Сообщений: n/a
По умолчанию 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  
Старый 28.10.2023, 09:41
Nil A
Guest
 
Сообщений: n/a
По умолчанию Заезды по памяти по 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  
Старый 28.10.2023, 10:11
Nil A
Guest
 
Сообщений: n/a
По умолчанию Заезды по памяти по 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
Ответить с цитированием
Ответ


Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход


Текущее время: 13:09. Часовой пояс GMT +4.


Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2024, vBulletin Solutions, Inc. Перевод: zCarot