| Index: fpdfsdk/fpdfview.cpp
|
| diff --git a/fpdfsdk/fpdfview.cpp b/fpdfsdk/fpdfview.cpp
|
| index dee71ac9e2bff399a169fbf23075ce519d4f8980..1c0af1dc10e2268fb9abba31f1f846f29125f3bf 100644
|
| --- a/fpdfsdk/fpdfview.cpp
|
| +++ b/fpdfsdk/fpdfview.cpp
|
| @@ -673,9 +673,20 @@ DLLEXPORT void STDCALL FPDF_ClosePage(FPDF_PAGE page) {
|
| #else // PDF_ENABLE_XFA
|
| CPDFSDK_PageView* pPageView =
|
| static_cast<CPDFSDK_PageView*>(pPage->GetView());
|
| - if (pPageView && pPageView->IsLocked()) {
|
| - pPageView->TakeOverPage();
|
| - return;
|
| + if (pPageView) {
|
| + if (pPageView->IsLocked()) {
|
| + pPageView->TakePageOwnership();
|
| + return;
|
| + }
|
| +
|
| + bool owned = pPageView->OwnsPage();
|
| + // This will delete the |pPageView| object. We must cleanup the PageView
|
| + // first because it will attempt to reset the View on the |pPage| during
|
| + // destruction.
|
| + pPageView->GetSDKDocument()->RemovePageView(pPage);
|
| + // If the page was owned then the pageview will have deleted the page.
|
| + if (owned)
|
| + return;
|
| }
|
| delete pPage;
|
| #endif // PDF_ENABLE_XFA
|
|
|