MantisBT  Site | Plugring | Plugins API and Macros | Forum | English Forum | Code

View Issue Details Jump to Notes ] Issue History ] Print ]
IDProjectCategoryView StatusDate SubmittedLast Update
0003444PluginsLuaMacro / Macro Browserpublic2017-06-09 20:592017-06-13 18:55
Reporterccaid 
Assigned Toshmuel 
PrioritynormalSeverityminorReproducibilityalways
StatusclosedResolutionfixed 
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.
Attached Files7z file icon luajit-2.1.0-b3-x64.7z [^] (199,659 bytes) 2017-06-10 22:22

- Relationships

-  Notes
(0015407)
shmuel (developer)
2017-06-09 21:40

На Windows 7 то же самое, но только на Far x64.
(0015408)
ccaid (reporter)
2017-06-09 21:58

не понял про «но». у меня тоже только Far x64
(0015409)
shmuel (developer)
2017-06-09 22:02

Я хотел сказать что на той же Windows 7 x64 Far 3 x86 не падает, падает только Far 3 x64.
(0015410)
ccaid (reporter)
2017-06-09 22:50

да, то что у меня под Win 10 x64 + Far x86 проблемы нет я забыл упомянуть.
(0015413)
shmuel (developer)
2017-06-10 22:24

Попробуйте заменить lua51.dll в папке Far на приложенный файл.
(0015414)
ccaid (reporter)
2017-06-11 13:49

с ним не падает
(0015415)
shmuel (developer)
2017-06-11 16:00

Хорошо, тогда проверяйте на следующей ночной сборке.
(0015416)
ccaid (reporter)
2017-06-13 10:03

не падает
(0015417)
shmuel (developer)
2017-06-13 10:21

Проблема была решена заменой 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
(0015418)
DrKnS (administrator)
2017-06-13 11:06

Может нам эти control87 & control87_2 в фар засунуть?
Перед вызовом каждого плагинового экспорта.
У меня есть подозрение, что эти паскакальные рантаймы ломают математику не только в луа.
(0015419)
shmuel (developer)
2017-06-13 12:15

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

Если есть намерение "защищать" (скажем так) и сам Фар, а не только плагины, то нужно будет вызывать защиту и после возвращения плагиновых экспортов.
(0015420)
DrKnS (administrator)
2017-06-13 12:18

Да, перед и после.
(0015421)
shmuel (developer)
2017-06-13 14:46
edited on: 2017-06-13 17:50

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

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

(0015422)
DrKnS (administrator)
2017-06-13 18:22

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.
(0015423)
shmuel (developer)
2017-06-13 18:55

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



Copyright © 2000 - 2017 MantisBT Team
Powered by Mantis Bugtracker