-
-
Notifications
You must be signed in to change notification settings - Fork 313
Description
MMEX version:
- 1.6.0
Operating System:
- Windows
- Mac OSX
- Linux
Description of the bug
MMEX crashes when adding a stock share transaction with a date older than the opening date of the investment account.
Reproduction
Is the bug reproducible?
- Always
- Randomly
- Happened only once
Reproduction steps:
Create a database with an investment account.
When opening the account it asks for the opening date. Leave the current date (e.g. 11/13/2022).
Add new stock investment. In the date also specify the same current date (11/13/2022).
When clicking save it asks for a share account, click ok to create one, Leave everything default, including date (again 11/13/2022),
Popup opens to add initial share transaction. Here use an older date, like 1/1/2022.
When clicking OK to save the share transaction, MMEX crashes.
Additionally, if you then reopen MMEX and try to open the investment account it will crash again.
Expected result:
MMEX should show something like an "invalid transaction" notification when trying to save the transaction with a date older than the account opening date.
Actual result:
MMEX immediately crashes when saving the transaction.
Because it also crashes whenever you try to reopen the investment account in the future, this essentially corrupts the DB and makes it unusable.
Additional information
Stacktrace from debug report.
<stack>
<frame level="0" offset="0" address="0x7ff6a28ed774"/>
<frame level="1" offset="0" address="0x7ff6a28ed66c"/>
<frame level="2" offset="0" address="0x7ff6a27bcad8"/>
<frame level="3" offset="0" address="0x7ff6a272cd4e"/>
<frame level="4" function="wxAppConsoleBase::CallEventHandler" offset="0x54" address="0x7ff9e3924af4"/>
<frame level="5" function="wxEvtHandler::ProcessEventIfMatchesId" offset="0x61" address="0x7ff9e3a40201"/>
<frame level="6" function="wxEventHashTable::HandleEvent" offset="0xbc" address="0x7ff9e3a3fdcc"/>
<frame level="7" function="wxEvtHandler::TryHereOnly" offset="0x3d" address="0x7ff9e3a40dbd"/>
<frame level="8" function="wxEvtHandler::ProcessEvent" offset="0xe2" address="0x7ff9e3a40152"/>
<frame level="9" function="wxWindowBase::TryAfter" offset="0x6f" address="0x7ff9dedb813f"/>
<frame level="10" function="wxEvtHandler::ProcessEvent" offset="0x101" address="0x7ff9e3a40171"/>
<frame level="11" function="wxWindowBase::TryAfter" offset="0x6f" address="0x7ff9dedb813f"/>
<frame level="12" function="wxEvtHandler::ProcessEvent" offset="0x101" address="0x7ff9e3a40171"/>
<frame level="13" function="wxEvtHandler::SafelyProcessEvent" offset="0x13" address="0x7ff9e3a409c3"/>
<frame level="14" function="wxButton::SendClickEvent" offset="0x91" address="0x7ff9dec71931"/>
<frame level="15" function="wxWindow::HandleCommand" offset="0xa3" address="0x7ff9dec23d03"/>
<frame level="16" function="wxWindow::MSWHandleMessage" offset="0xac8" address="0x7ff9dec2a3c8"/>
<frame level="17" function="wxWindow::MSWWindowProc" offset="0x38" address="0x7ff9dec2ce68"/>
<frame level="18" function="wxWndProc" offset="0x90" address="0x7ff9dec32cf0"/>
<frame level="19" function="CallWindowProcW" offset="0x3f8" address="0x7ffa1778e858"/>
<frame level="20" function="SendMessageW" offset="0x86b" address="0x7ffa1778de1b"/>
<frame level="21" function="SendMessageW" offset="0xda" address="0x7ffa1778d68a"/>
<frame level="22" function="ImageList_LoadImageW" offset="0x367" address="0x7ffa09652467"/>
<frame level="23" function="ImageList_WriteEx" offset="0x9a0" address="0x7ffa096620f0"/>
<frame level="24" function="CallWindowProcW" offset="0x3f8" address="0x7ffa1778e858"/>
<frame level="25" function="CallWindowProcW" offset="0x8e" address="0x7ffa1778e4ee"/>
<frame level="26" function="wxWindow::MSWDefWindowProc" offset="0x54" address="0x7ff9dec28984"/>
<frame level="27" function="wxWindow::MSWWindowProc" offset="0x50" address="0x7ff9dec2ce80"/>
<frame level="28" function="wxWndProc" offset="0x90" address="0x7ff9dec32cf0"/>
<frame level="29" function="CallWindowProcW" offset="0x3f8" address="0x7ffa1778e858"/>
<frame level="30" function="DispatchMessageW" offset="0x259" address="0x7ffa1778e299"/>
<frame level="31" function="IsDialogMessageW" offset="0x280" address="0x7ffa1778c050"/>
<frame level="32" function="wxWindow::MSWSafeIsDialogMessage" offset="0x137" address="0x7ff9dec2c187"/>
<frame level="33" function="wxWindow::MSWProcessMessage" offset="0x2c4" address="0x7ff9dec2bde4"/>
<frame level="34" function="wxGUIEventLoop::PreProcessMessage" offset="0x16f" address="0x7ff9dec5679f"/>
<frame level="35" function="wxGUIEventLoop::ProcessMessage" offset="0x12" address="0x7ff9dec567f2"/>
<frame level="36" function="wxGUIEventLoop::Dispatch" offset="0x1a1" address="0x7ff9dec56161"/>
<frame level="37" function="wxEventLoopManual::DoRun" offset="0x93" address="0x7ff9e39520b3"/>
<frame level="38" function="wxEventLoopBase::Run" offset="0x74" address="0x7ff9e3952344"/>
<frame level="39" function="wxDialog::ShowModal" offset="0x13e" address="0x7ff9dec7b65e"/>
<frame level="40" offset="0" address="0x7ff6a27c9532"/>
<frame level="41" offset="0" address="0x7ff6a27ce2a5"/>
<frame level="42" offset="0" address="0x7ff6a272cd4e"/>
<frame level="43" function="wxAppConsoleBase::CallEventHandler" offset="0x54" address="0x7ff9e3924af4"/>
<frame level="44" function="wxEvtHandler::ProcessEventIfMatchesId" offset="0x61" address="0x7ff9e3a40201"/>
<frame level="45" function="wxEventHashTable::HandleEvent" offset="0xbc" address="0x7ff9e3a3fdcc"/>
<frame level="46" function="wxEvtHandler::TryHereOnly" offset="0x3d" address="0x7ff9e3a40dbd"/>
<frame level="47" function="wxEvtHandler::ProcessEvent" offset="0xe2" address="0x7ff9e3a40152"/>
<frame level="48" function="wxWindowBase::TryAfter" offset="0x6f" address="0x7ff9dedb813f"/>
<frame level="49" function="wxEvtHandler::ProcessEvent" offset="0x101" address="0x7ff9e3a40171"/>
<frame level="50" function="wxEvtHandler::SafelyProcessEvent" offset="0x13" address="0x7ff9e3a409c3"/>
<frame level="51" function="wxButton::SendClickEvent" offset="0x91" address="0x7ff9dec71931"/>
<frame level="52" function="wxWindow::HandleCommand" offset="0xa3" address="0x7ff9dec23d03"/>
<frame level="53" function="wxWindow::MSWHandleMessage" offset="0xac8" address="0x7ff9dec2a3c8"/>
<frame level="54" function="wxWindow::MSWWindowProc" offset="0x38" address="0x7ff9dec2ce68"/>
<frame level="55" function="wxNonOwnedWindow::MSWWindowProc" offset="0x209" address="0x7ff9debfca99"/>
<frame level="56" function="wxTopLevelWindowMSW::MSWWindowProc" offset="0xea" address="0x7ff9dec1b0ea"/>
<frame level="57" function="wxDialog::MSWWindowProc" offset="0x50" address="0x7ff9dec7afb0"/>
<frame level="58" function="wxWndProc" offset="0x90" address="0x7ff9dec32cf0"/>
<frame level="59" function="CallWindowProcW" offset="0x3f8" address="0x7ffa1778e858"/>
<frame level="60" function="SendMessageW" offset="0x86b" address="0x7ffa1778de1b"/>
<frame level="61" function="SendMessageW" offset="0xda" address="0x7ffa1778d68a"/>
<frame level="62" function="ImageList_LoadImageW" offset="0x367" address="0x7ffa09652467"/>
<frame level="63" function="ImageList_WriteEx" offset="0x9a0" address="0x7ffa096620f0"/>
<frame level="64" function="CallWindowProcW" offset="0x3f8" address="0x7ffa1778e858"/>
<frame level="65" function="CallWindowProcW" offset="0x8e" address="0x7ffa1778e4ee"/>
<frame level="66" function="wxWindow::MSWDefWindowProc" offset="0x54" address="0x7ff9dec28984"/>
<frame level="67" function="wxWindow::MSWWindowProc" offset="0x50" address="0x7ff9dec2ce80"/>
<frame level="68" function="wxWndProc" offset="0x90" address="0x7ff9dec32cf0"/>
<frame level="69" function="CallWindowProcW" offset="0x3f8" address="0x7ffa1778e858"/>
<frame level="70" function="DispatchMessageW" offset="0x259" address="0x7ffa1778e299"/>
<frame level="71" function="IsDialogMessageW" offset="0x280" address="0x7ffa1778c050"/>
<frame level="72" function="wxWindow::MSWSafeIsDialogMessage" offset="0x137" address="0x7ff9dec2c187"/>
<frame level="73" function="wxWindow::MSWProcessMessage" offset="0x2c4" address="0x7ff9dec2bde4"/>
<frame level="74" function="wxGUIEventLoop::PreProcessMessage" offset="0x16f" address="0x7ff9dec5679f"/>
<frame level="75" function="wxGUIEventLoop::ProcessMessage" offset="0x12" address="0x7ff9dec567f2"/>
<frame level="76" function="wxGUIEventLoop::Dispatch" offset="0x1a1" address="0x7ff9dec56161"/>
<frame level="77" function="wxEventLoopManual::DoRun" offset="0x93" address="0x7ff9e39520b3"/>
<frame level="78" function="wxEventLoopBase::Run" offset="0x74" address="0x7ff9e3952344"/>
<frame level="79" function="wxDialog::ShowModal" offset="0x13e" address="0x7ff9dec7b65e"/>
<frame level="80" offset="0" address="0x7ff6a27ed6ef"/>
<frame level="81" offset="0" address="0x7ff6a272cd4e"/>
<frame level="82" function="wxAppConsoleBase::CallEventHandler" offset="0x54" address="0x7ff9e3924af4"/>
<frame level="83" function="wxEvtHandler::ProcessEventIfMatchesId" offset="0x61" address="0x7ff9e3a40201"/>
<frame level="84" function="wxEventHashTable::HandleEvent" offset="0xbc" address="0x7ff9e3a3fdcc"/>
<frame level="85" function="wxEvtHandler::TryHereOnly" offset="0x3d" address="0x7ff9e3a40dbd"/>
<frame level="86" function="wxEvtHandler::ProcessEvent" offset="0xe2" address="0x7ff9e3a40152"/>
<frame level="87" function="wxEvtHandler::SafelyProcessEvent" offset="0x13" address="0x7ff9e3a409c3"/>
<frame level="88" function="wxMenuBase::DoProcessEvent" offset="0xd0" address="0x7ff9ded76aa0"/>
<frame level="89" function="wxMenuBase::SendEvent" offset="0xa6" address="0x7ff9ded781e6"/>
<frame level="90" function="wxMenu::MSWCommand" offset="0xab" address="0x7ff9deca18fb"/>
<frame level="91" function="wxWindow::HandleCommand" offset="0x63" address="0x7ff9dec23cc3"/>
<frame level="92" function="wxWindow::MSWHandleMessage" offset="0xac8" address="0x7ff9dec2a3c8"/>
<frame level="93" function="wxWindow::MSWWindowProc" offset="0x38" address="0x7ff9dec2ce68"/>
<frame level="94" function="wxListCtrl::MSWWindowProc" offset="0x68" address="0x7ff9dec96e28"/>
<frame level="95" function="wxWndProc" offset="0x90" address="0x7ff9dec32cf0"/>
<frame level="96" function="CallWindowProcW" offset="0x3f8" address="0x7ffa1778e858"/>
<frame level="97" function="DispatchMessageW" offset="0x259" address="0x7ffa1778e299"/>
<frame level="98" function="wxWindow::DoPopupMenu" offset="0xf1" address="0x7ff9dec21761"/>
<frame level="99" function="wxWindowBase::PopupMenu" offset="0x60" address="0x7ff9dedb5b60"/>
<frame level="100" offset="0" address="0x7ff6a27ed281"/>
<frame level="101" offset="0" address="0x7ff6a272cd4e"/>
<frame level="102" function="wxAppConsoleBase::CallEventHandler" offset="0x54" address="0x7ff9e3924af4"/>
<frame level="103" function="wxEvtHandler::ProcessEventIfMatchesId" offset="0x61" address="0x7ff9e3a40201"/>
<frame level="104" function="wxEventHashTable::HandleEvent" offset="0xbc" address="0x7ff9e3a3fdcc"/>
<frame level="105" function="wxEvtHandler::TryHereOnly" offset="0x3d" address="0x7ff9e3a40dbd"/>
<frame level="106" function="wxEvtHandler::ProcessEvent" offset="0xe2" address="0x7ff9e3a40152"/>
<frame level="107" function="wxEvtHandler::SafelyProcessEvent" offset="0x13" address="0x7ff9e3a409c3"/>
<frame level="108" function="wxWindow::HandleMouseEvent" offset="0xc3" address="0x7ff9dec25353"/>
<frame level="109" function="wxWindow::MSWHandleMessage" offset="0x132d" address="0x7ff9dec2ac2d"/>
<frame level="110" function="wxWindow::MSWWindowProc" offset="0x38" address="0x7ff9dec2ce68"/>
<frame level="111" function="wxListCtrl::MSWWindowProc" offset="0x68" address="0x7ff9dec96e28"/>
<frame level="112" function="wxWndProc" offset="0x90" address="0x7ff9dec32cf0"/>
<frame level="113" function="CallWindowProcW" offset="0x3f8" address="0x7ffa1778e858"/>
<frame level="114" function="DispatchMessageW" offset="0x259" address="0x7ffa1778e299"/>
<frame level="115" function="IsDialogMessageW" offset="0x280" address="0x7ffa1778c050"/>
<frame level="116" function="wxWindow::MSWSafeIsDialogMessage" offset="0x137" address="0x7ff9dec2c187"/>
<frame level="117" function="wxWindow::MSWProcessMessage" offset="0x2c4" address="0x7ff9dec2bde4"/>
<frame level="118" function="wxGUIEventLoop::PreProcessMessage" offset="0x16f" address="0x7ff9dec5679f"/>
<frame level="119" function="wxGUIEventLoop::ProcessMessage" offset="0x12" address="0x7ff9dec567f2"/>
<frame level="120" function="wxGUIEventLoop::Dispatch" offset="0x1a1" address="0x7ff9dec56161"/>
<frame level="121" function="wxEventLoopManual::DoRun" offset="0x93" address="0x7ff9e39520b3"/>
<frame level="122" function="wxEventLoopBase::Run" offset="0x74" address="0x7ff9e3952344"/>
<frame level="123" function="wxAppConsoleBase::MainLoop" offset="0x77" address="0x7ff9e3926f27"/>
<frame level="124" function="wxEntryCleanup" offset="0x146" address="0x7ff9e398f106"/>
<frame level="125" function="wxEntry" offset="0x28" address="0x7ff9e3a457c8"/>
<frame level="126" offset="0" address="0x7ff6a2a1895a"/>
<frame level="127" function="BaseThreadInitThunk" offset="0x14" address="0x7ffa173574b4"/>
<frame level="128" function="RtlUserThreadStart" offset="0x21" address="0x7ffa17ae26a1"/>
</stack>