View Issue Details

IDProjectCategoryView StatusLast Update
0003444PluginsLuaMacro / Macro Browserpublic2017-06-13 18:55
ReporterccaidAssigned Toshmuel 
PrioritynormalSeverityminorReproducibilityalways
Status closedResolutionfixed 
Platformx64OSWindowsOS Version10
Product Version3.0 
Target VersionFixed in Version 
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 21:40

developer   bugnote:0015407

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

ccaid

2017-06-09 21:58

reporter   bugnote:0015408

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

shmuel

2017-06-09 22:02

developer   bugnote:0015409

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

ccaid

2017-06-09 22:50

reporter   bugnote:0015410

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

shmuel

2017-06-10 22:22

developer  

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

shmuel

2017-06-10 22:24

developer   bugnote:0015413

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

ccaid

2017-06-11 13:49

reporter   bugnote:0015414

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

shmuel

2017-06-11 16:00

developer   bugnote:0015415

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

ccaid

2017-06-13 10:03

reporter   bugnote:0015416

не падает

shmuel

2017-06-13 10: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 11:06

administrator   bugnote:0015418

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

shmuel

2017-06-13 12:15

developer   bugnote:0015419

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

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

DrKnS

2017-06-13 12:18

administrator   bugnote:0015420

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

shmuel

2017-06-13 14:46

developer   bugnote:0015421

Last edited: 2017-06-13 17:50

View 2 revisions

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

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

DrKnS

2017-06-13 18: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 18:55

developer   bugnote:0015423

Mike Pall wrote

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

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

Issue History

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