wxWidgets / wxWidgets

Cross-Platform C++ GUI Library
https://www.wxwidgets.org/
5.77k stars 1.7k forks source link

Closing wxLogDialog crashes the application #24480

Closed PBfordev closed 4 weeks ago

PBfordev commented 4 weeks ago

Description

Closing wxLogDialog on Windows (did not test on other platforms) crashes the application:

Exception thrown at 0x00007FFFD677902F (wxmsw330ud_core_vc_x64_custom.dll) in dialogs.exe: 0xC0000005: Access violation reading location 0xFFFFFFFFFFFFFFFF.

The GIT bisect points to https://github.com/wxWidgets/wxWidgets/commit/0ae8be428ae376952af20c6ae8dcd6114c6c0329 (not sure if the bug is in wxLogDialog or wxListCtrl /wxWithImages).

Stack trace

The crash happens when attempting to delete wxImageList in wxListCtrl dtor: https://github.com/wxWidgets/wxWidgets/blob/c53406d6c556692a2796085de898ccb01fa3649a/include/wx/withimages.h#L342-L349

>   wxmsw330ud_core_vc_x64_custom.dll!wxWithImages::FreeIfNeeded() Line 344 C++ Symbols loaded.
    wxmsw330ud_core_vc_x64_custom.dll!wxWithImages::~wxWithImages() Line 44 C++ Symbols loaded.
    wxmsw330ud_core_vc_x64_custom.dll!wxListCtrlBase::~wxListCtrlBase() C++ Non-user code. Symbols loaded.
    wxmsw330ud_core_vc_x64_custom.dll!wxListCtrl::~wxListCtrl() Line 543    C++ Symbols loaded.
    wxmsw330ud_core_vc_x64_custom.dll!wxListCtrl::`vector deleting destructor'(unsigned int)    C++ Non-user code. Symbols loaded.
    wxmsw330ud_core_vc_x64_custom.dll!wxWindowBase::Destroy() Line 570  C++ Symbols loaded.
    wxmsw330ud_core_vc_x64_custom.dll!wxWindowBase::DestroyChildren() Line 604  C++ Symbols loaded.
    wxmsw330ud_core_vc_x64_custom.dll!wxWindow::~wxWindow() Line 470    C++ Symbols loaded.
    wxmsw330ud_core_vc_x64_custom.dll!wxNavigationEnabled<wxWindow>::~wxNavigationEnabled<wxWindow>()   C++ Non-user code. Symbols loaded.
    wxmsw330ud_core_vc_x64_custom.dll!wxPanel::~wxPanel()   C++ Non-user code. Symbols loaded.
    wxmsw330ud_core_vc_x64_custom.dll!wxPanel::`vector deleting destructor'(unsigned int)   C++ Non-user code. Symbols loaded.
    wxmsw330ud_core_vc_x64_custom.dll!wxWindowBase::Destroy() Line 570  C++ Symbols loaded.
    wxmsw330ud_core_vc_x64_custom.dll!wxWindowBase::DestroyChildren() Line 604  C++ Symbols loaded.
    wxmsw330ud_core_vc_x64_custom.dll!wxWindow::~wxWindow() Line 470    C++ Symbols loaded.
    wxmsw330ud_core_vc_x64_custom.dll!wxControlBase::~wxControlBase() Line 47   C++ Symbols loaded.
    wxmsw330ud_core_vc_x64_custom.dll!wxControl::~wxControl()   C++ Non-user code. Symbols loaded.
    wxmsw330ud_core_vc_x64_custom.dll!wxCollapsiblePaneBase::~wxCollapsiblePaneBase()   C++ Non-user code. Symbols loaded.
    wxmsw330ud_core_vc_x64_custom.dll!wxNavigationEnabled<wxCollapsiblePaneBase>::~wxNavigationEnabled<wxCollapsiblePaneBase>() C++ Non-user code. Symbols loaded.
    wxmsw330ud_core_vc_x64_custom.dll!wxGenericCollapsiblePane::~wxGenericCollapsiblePane() Line 108    C++ Symbols loaded.
    wxmsw330ud_core_vc_x64_custom.dll!wxGenericCollapsiblePane::`vector deleting destructor'(unsigned int)  C++ Non-user code. Symbols loaded.
    wxmsw330ud_core_vc_x64_custom.dll!wxWindowBase::Destroy() Line 570  C++ Symbols loaded.
    wxmsw330ud_core_vc_x64_custom.dll!wxWindowBase::DestroyChildren() Line 604  C++ Symbols loaded.
    wxmsw330ud_core_vc_x64_custom.dll!wxWindow::~wxWindow() Line 470    C++ Symbols loaded.
    wxmsw330ud_core_vc_x64_custom.dll!wxNonOwnedWindowBase::~wxNonOwnedWindowBase() C++ Non-user code. Symbols loaded.
    wxmsw330ud_core_vc_x64_custom.dll!wxNonOwnedWindow::~wxNonOwnedWindow() Line 157    C++ Symbols loaded.
    wxmsw330ud_core_vc_x64_custom.dll!wxTopLevelWindowBase::~wxTopLevelWindowBase() Line 99 C++ Symbols loaded.
    wxmsw330ud_core_vc_x64_custom.dll!wxTopLevelWindowMSW::~wxTopLevelWindowMSW() Line 523  C++ Symbols loaded.
    wxmsw330ud_core_vc_x64_custom.dll!wxTopLevelWindow::~wxTopLevelWindow() C++ Non-user code. Symbols loaded.
    wxmsw330ud_core_vc_x64_custom.dll!wxNavigationEnabled<wxTopLevelWindow>::~wxNavigationEnabled<wxTopLevelWindow>()   C++ Non-user code. Symbols loaded.
    wxmsw330ud_core_vc_x64_custom.dll!wxDialogBase::~wxDialogBase() Line 67 C++ Symbols loaded.
    wxmsw330ud_core_vc_x64_custom.dll!wxDialog::~wxDialog() Line 190    C++ Symbols loaded.
    wxmsw330ud_core_vc_x64_custom.dll!wxLogDialog::~wxLogDialog() Line 997  C++ Symbols loaded.
    wxmsw330ud_core_vc_x64_custom.dll!wxLogGui::DoShowMultipleLogMessages(const wxArrayString & messages={...}, const wxArrayInt & severities={...}, const wxArrayLong & times={...}, const wxString & title={...}, int style=512) Line 310 C++ Symbols loaded.
    wxmsw330ud_core_vc_x64_custom.dll!wxLogGui::Flush() Line 364    C++ Symbols loaded.
    wxbase330ud_vc_x64_custom.dll!wxLog::FlushActive() Line 826 C++ Symbols loaded.
    dialogs.exe!MyFrame::LogDialog(wxCommandEvent & __formal={...}) Line 938    C++ Symbols loaded.

To Reproduce

  1. Run the dialogs sample.
  2. Press <Ctrl+L> to show the Log Dialog.
  3. Click OK to close the dialog.
  4. Observe crash.

Platform and version information

vadz commented 4 weeks ago

Thanks for noticing this, will try to debug/fix a.s.a.p.

vadz commented 4 weeks ago

Thanks again for reporting this, fixed now.