Index: fpdfsdk/fsdk_mgr.cpp |
diff --git a/fpdfsdk/fsdk_mgr.cpp b/fpdfsdk/fsdk_mgr.cpp |
index 9017e20b3277f0782ada51639867141ef31249ba..e142c0c229fe3f4188809b1aa258a4e65b6e07e4 100644 |
--- a/fpdfsdk/fsdk_mgr.cpp |
+++ b/fpdfsdk/fsdk_mgr.cpp |
@@ -361,11 +361,17 @@ void CPDFSDK_Document::RemovePageView(UnderlyingPageType* pUnderlyingPage) { |
if (pPageView->IsLocked()) |
return; |
+ // This must happen before we remove |pPageView| from the map because |
+ // |KillFocusAnnotIfNeeded| can call into the |GetPage| method which will |
+ // look for this page view in the map, if it doesn't find it a new one will |
+ // be created. We then have two page views pointing to the same page and |
+ // bad things happen. |
+ pPageView->KillFocusAnnotIfNeeded(); |
+ |
// Remove the page from the map to make sure we don't accidentally attempt |
// to use the |pPageView| while we're cleaning it up. |
m_pageMap.erase(it); |
- pPageView->KillFocusAnnotIfNeeded(); |
delete pPageView; |
} |