Join GitHub today
GitHub is home to over 31 million developers working together to host and review code, manage projects, and build software together.
Sign upС ru-board: падение FarColorer при некорректном вызове через Plugin.Call(MainGuid,0) #19
Comments
This comment has been minimized.
This comment has been minimized.
z0hm
commented
Feb 15, 2017
Я не согласен, что вызов должен игнорироваться - должны игнорироваться только пункты, относящиеся к непосредственной работе в редакторе, конфигурация должна быть доступна. |
This comment has been minimized.
This comment has been minimized.
Диалог, который зовётся данным вызовом может быть обработан только после запуска и инициализации плагина, а если он зовётся в момент запуска, то некорректный по смыслу вызов должн быть проигнорирован чтобы не происходило падения. Это нормальная защита от ошибок оператора и по другому делать нельзя. Идея звать диалог до инициализации плагина а после удивляться тому, что он упал аналогична тому как водитель вызвавший аварию в своё оправдание говорит "Я рулю правильно, это дорога кривая!".:) |
This comment has been minimized.
This comment has been minimized.
shmuz
commented
Feb 15, 2017
@z0hm, если всё, что вам нужно из панелей - это меню конфигурации, то для этого есть |
This comment has been minimized.
This comment has been minimized.
Добавлю - первопричина падения это нарушение временной последовательности событий когда более поздняя по времени операция - вызов подпрограммы осуществляется до того как запустится и инициализируется основная процедура что приводит к неопределённому состоянию задачи на момент его обработки и передаче управления по случайному адресу с непредсказуемыми последствиями, а потому такой вызов должен по умолчанию игнорироваться либо его обработка должна происходить по следующему алгоритму:
но, не падать, ибо падение это исключительная ситуация говорящая о том, что алгоритм не смог обработать ошибку. |
This comment has been minimized.
This comment has been minimized.
z0hm
commented
Feb 15, 2017
•
В момент вызова Plugin.Call() неизвестно в каком состоянии находится плагин, соответственно корректная отработка вызова целиком и полностью в его зоне ответственности. Если какие-либо структуры не проинициализированы, то нужно их инициализировать и лишь затем выполнять код обработки вызова. |
This comment has been minimized.
This comment has been minimized.
Так это в частности и описывает вышеприведённый фрагмент алгоритма, поскольку сейчас при обработке вызова до момента полной загрузки и инициализации кода плагина управление передаётся на неопределённый двоичный код, в общем случае это мусор, что и приводит к сбою. И способ вызова плагина не важен, важно что происходит нарушение временной целостности очереди событий. |
added a commit
that referenced
this issue
Feb 19, 2017
ctapmex
added
the
bug
label
Feb 19, 2017
ctapmex
closed this
Feb 19, 2017
This comment has been minimized.
This comment has been minimized.
Добренько, соберём. |
This comment has been minimized.
This comment has been minimized.
Готово, лежит у меня в ./Far3, собрано в VC++2010, х86 для XP SP3, AMD64 для Vista и выше (линкер вставляет четыре функции fls*() по информации MSDN реализованные начиная с Vista). |
VictorVG commentedFeb 15, 2017
•
edited
С форума ru-board: падение FarColorer при некорректном вызове через Plugin.Call(MainGuid,0)
вызов явно не корректен и по идее должен игнорироваться, а не падать.
Факт падения на b4898 x64 Win7 SP1 если выдать команду
lua:Plugin.Call("D2F36B62-A470-418D-83A3-ED7A3710E5B5",0)
сразу после запуска Far подтверждаю, падает с AV в OpenW():Стек:
Far.mdmp.7z (~22 Mb, 7-Zip v16.04, LZMA, SOLID, MAXIMUM) на момент падения (дамп развернётся на 100 Мб) прилагаю.
Запись на Мантисе: M#3396, только констатация факта:)