https://bugs.winehq.org/show_bug.cgi?id=52131
--- Comment #27 from Eric eric.wheez@gmail.com --- I believe I've solved the mystery of where the crash is coming from and have an idea for maybe how to fix it for future cases like this, though I'm not entirely certain since I'm not very savvy with programming yet.
Comparing RMS Channels.dat to this Gateway Channels database: https://www.winlink.org/content/gateway_channels (select ARDOP), I found that the 9W2RUT station's input frequency is probably a typo in RMS Channels.dat (since the Gateway Channels database link says that 9W2RUT is supposed to be on 7,093.000 KHz)
Station | Freq Database | Our Frequency | RMS Channels.dat -> dvoa.dll (as sent from RMS) | (KHz) | (MHz) | (Hz) -> (MHz) ------------------------------------------------------------------------------------ DA5UDI | 7,051.400 KHz | 7.051400 MHz | 7051400 -> "Freqs": [ 7.05] (works) test | n/a | 0.054999 MHz | 54999 -> "Freqs": [ 0.05] (Delphi CRASH!) 9W2RUT | 7,093.000 KHz | 0.007093 MHz | 7093 (TYPO!) -> "Freqs": [ 0.01] (Delphi CRASH!)
I got in contact with the author of D-VOACAP (dvoa.dll) to see if these crashes on low-value frequency inputs were normal. He let me know that dvoa.dll is not supposed to handle frequencies below 2 MHz: "The VOACAP algorithm works in the frequency range from 2 MHz to 30 MHz. It has poor accuracy below 4 MHz and falls apart completely below 2 MHz. Please see this paper for the details." https://github.com/VE3NEA/DVOACAP/issues/3
I also learned but looking through the dvoa.dll code that these Delphi exceptions are normal behavior - the author has dvoa.dll print an error message if frequencies are too low. https://github.com/VE3NEA/DVOACAP/blob/6032495873534dec33b124b722c9a67071af9... I'm guessing here but I believe that this programmer-generated error then might be seen by wine-mono as 0x0eedfade and then crashes wine-mono.
Knowing all this, I think I'll reach out to the RMS Express devs to have them fix the typo in the 9W2RUT station in RMS Channels.dat, but I'll also suggest to them some exception handling in RMS Express to warn users about calculating frequencies below 2 MHz. That should fix the RMS Express side.
I think it's useful to know that wine-mono crashes when Delphi/Pascal programs throw programmer-generated error messages though. Maybe telling wine-mono to ignore 0x0eedfade Delphi exceptions could prevent future wine-mono crashes in these cases?