diff --git a/src/SumatraPDF.cpp b/src/SumatraPDF.cpp index 66c3eb77ac13..c63868dbe6d3 100644 --- a/src/SumatraPDF.cpp +++ b/src/SumatraPDF.cpp @@ -2314,6 +2314,7 @@ extern void SetTabState(WindowTab* tab, TabState* state); // Call SaveSettings asynchronously to avoid running it in the middle of // document/tab transitions during document load completion. +// Fixes crashes with dangling tab->ctrl under rapid DDE opens + hooks. static void SaveSettingsVoid() { SaveSettings(); } @@ -2354,6 +2355,10 @@ MainWindow* LoadDocumentFinish(LoadArgs* args) { tab->SetFilePath(fullPath); win->currentTabTemp = AddTabToWindow(win, tab); + if (!IsMainWindowValid(win) || win->isBeingClosed) { + return nullptr; + } + // logf("LoadDocument: !forceReuse, created win->CurrentTab() at 0x%p\n", win->CurrentTab()); } else { win->CurrentTab()->SetFilePath(fullPath); @@ -2389,6 +2394,10 @@ MainWindow* LoadDocumentFinish(LoadArgs* args) { } } + if (!IsMainWindowValid(win) || win->isBeingClosed) { + return nullptr; + } + if (gPluginMode) { // hide the menu for embedded documents opened from the plugin SetMenu(win->hwndFrame, nullptr);