View Issue Details

IDProjectCategoryView StatusLast Update
0003444PluginsLuaMacro / Macro Browserpublic2017-06-13 15:55
Reporterccaid Assigned Toshmuel  
PrioritynormalSeverityminorReproducibilityalways
Status closedResolutionfixed 
Platformx64OSWindowsOS Version10
Product Version3.0 
Summary0003444: log10(0) в присутствии MoreHistory роняет Far
DescriptionВычисление выражения log10(0) в Lua, если загружен плагин MoreHistory, приводит к мгновенному падению Far без каких-либо сообщений. Происходит только на платформе x64. Обнаружено под Windows 10, как под другими версиями — не выяснял.
Steps To Reproduceраспаковываем Far Manager v3.0 build 4972 x64 в какую-нибудь папку (проверялось именно на этом билде)
стандартные плагины можно оставить, можно убрать, кроме LuaMacro.
добавляем плагин MoreHistory http://forum.farmanager.com/viewtopic.php?f=5&t=3817
загружаем Far, можно с созданием локального профиля:
far -s Profile
выполняем в комстроке команду:
lua:math.log10(0)
получаем падение Far
Additional Informationhttp://forum.farmanager.com/viewtopic.php?p=144341#p144341
TagsNo tags attached.

Activities

shmuel

2017-06-09 18:40

developer   bugnote:0015407

На Windows 7 то же самое, но только на Far x64.

ccaid

2017-06-09 18:58

reporter   bugnote:0015408

не понял про «но». у меня тоже только Far x64

shmuel

2017-06-09 19:02

developer   bugnote:0015409

Я хотел сказать что на той же Windows 7 x64 Far 3 x86 не падает, падает только Far 3 x64.

ccaid

2017-06-09 19:50

reporter   bugnote:0015410

да, то что у меня под Win 10 x64 + Far x86 проблемы нет я забыл упомянуть.

shmuel

2017-06-10 19:22

developer  

luajit-2.1.0-b3-x64.7z (199,659 bytes)

shmuel

2017-06-10 19:24

developer   bugnote:0015413

Попробуйте заменить lua51.dll в папке Far на приложенный файл.

ccaid

2017-06-11 10:49

reporter   bugnote:0015414

с ним не падает

shmuel

2017-06-11 13:00

developer   bugnote:0015415

Хорошо, тогда проверяйте на следующей ночной сборке.

ccaid

2017-06-13 07:03

reporter   bugnote:0015416

не падает

shmuel

2017-06-13 07:21

developer   bugnote:0015417

Проблема была решена заменой LuaJIT 2.0.5 на LuaJIT 2.1.0-beta3.
Объяснение данному явлению можно найти здесь:
[1] https://www.freelists.org/post/luajit/Floating-point-exception-on-x64
[2] https://www.freelists.org/post/luajit/Floating-point-exception-on-x64,1

DrKnS

2017-06-13 08:06

administrator   bugnote:0015418

Может нам эти control87 & control87_2 в фар засунуть?
Перед вызовом каждого плагинового экспорта.
У меня есть подозрение, что эти паскакальные рантаймы ломают математику не только в луа.

shmuel

2017-06-13 09:15

developer   bugnote:0015419

В связи со спецификой LuaMacro приходится вызывать _control87 не только при получении управления от Фара, но и во время его работы, после возврата из любой макрофункции (например, Plugin.Call может вызвать паскалевский плагин).

Если есть намерение "защищать" (скажем так) и сам Фар, а не только плагины, то нужно будет вызывать защиту и после возвращения плагиновых экспортов.

DrKnS

2017-06-13 09:18

administrator   bugnote:0015420

Да, перед и после.

shmuel

2017-06-13 11:46

developer   bugnote:0015421

Last edited: 2017-06-13 14:50

Интересно, а где живёт (в какой DLL) этот __control87_2 ? MinGW 7.1.0 его вообще не знает.

Сделал поиск __control87_2 на своём компьютере среди *.dll, прервал поиск через примерно час. Нашёл за это время 16 файлов, к моему удивлению все они - 32-битные DLL.

DrKnS

2017-06-13 15:22

administrator   bugnote:0015422

https://msdn.microsoft.com/en-us/library/e9b52ceh.aspx

Note
__control87_2 is not supported on the ARM or x64 architectures. If you use __control87_2 and compile your program for the ARM or x64 architectures, the compiler generates an error.

shmuel

2017-06-13 15:55

developer   bugnote:0015423

As weird as this sounds, but on x64, _control87() only affects
SSE2 state, but not x87 state. Use __control87_2(), check MSDN.

Mike Pall
Что ж, получается что и большие авторитеты бывают неправы.

Issue History

Date Modified Username Field Change
2017-06-09 17:59 ccaid New Issue
2017-06-09 18:40 shmuel Note Added: 0015407
2017-06-09 18:58 ccaid Note Added: 0015408
2017-06-09 19:02 shmuel Note Added: 0015409
2017-06-09 19:50 ccaid Note Added: 0015410
2017-06-10 19:22 shmuel File Added: luajit-2.1.0-b3-x64.7z
2017-06-10 19:24 shmuel Note Added: 0015413
2017-06-11 10:49 ccaid Note Added: 0015414
2017-06-11 13:00 shmuel Note Added: 0015415
2017-06-11 13:00 shmuel Assigned To => shmuel
2017-06-11 13:00 shmuel Status new => feedback
2017-06-13 07:03 ccaid Note Added: 0015416
2017-06-13 07:03 ccaid Status feedback => assigned
2017-06-13 07:21 shmuel Note Added: 0015417
2017-06-13 07:21 shmuel Status assigned => closed
2017-06-13 07:21 shmuel Resolution open => fixed
2017-06-13 08:06 DrKnS Note Added: 0015418
2017-06-13 09:15 shmuel Note Added: 0015419
2017-06-13 09:18 DrKnS Note Added: 0015420
2017-06-13 11:46 shmuel Note Added: 0015421
2017-06-13 14:50 shmuel Note Edited: 0015421
2017-06-13 15:22 DrKnS Note Added: 0015422
2017-06-13 15:55 shmuel Note Added: 0015423