Index: fpdfsdk/fsdk_mgr.cpp |
diff --git a/fpdfsdk/fsdk_mgr.cpp b/fpdfsdk/fsdk_mgr.cpp |
index eb3f51e97c4ba19170fb8b8f60ca93c26e1b20f3..694e3154ce8eb99d44005c4cc29979db56aa4268 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; |
} |