Use fxcrt::AutoNuller<T> in CPDFXA_Context::LoadXFADoc(). Change-Id: I89f0bcfb8386008c0f5b1c91813e58916680f802 Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/72833 Reviewed-by: Lei Zhang <thestig@chromium.org> Commit-Queue: Tom Sepez <tsepez@chromium.org>
diff --git a/fpdfsdk/fpdfxfa/cpdfxfa_context.cpp b/fpdfsdk/fpdfxfa/cpdfxfa_context.cpp index a431e38..cbd3624 100644 --- a/fpdfsdk/fpdfxfa/cpdfxfa_context.cpp +++ b/fpdfsdk/fpdfxfa/cpdfxfa_context.cpp
@@ -13,6 +13,7 @@ #include "core/fpdfapi/parser/cpdf_dictionary.h" #include "core/fpdfapi/parser/cpdf_document.h" #include "core/fpdfapi/parser/cpdf_seekablemultistream.h" +#include "core/fxcrt/autonuller.h" #include "core/fxcrt/fx_memory_wrappers.h" #include "core/fxcrt/xml/cfx_xmldocument.h" #include "core/fxcrt/xml/cfx_xmlparser.h" @@ -130,6 +131,7 @@ return false; } + AutoNuller<std::unique_ptr<CXFA_FFDoc>> doc_nuller(&m_pXFADoc); m_pXFADoc = CXFA_FFDoc::CreateAndOpen(m_pXFAApp.get(), m_pDocEnv.get(), m_pPDFDoc.Get(), m_pGCHeap.get(), m_pXML.get()); @@ -139,7 +141,6 @@ } if (!m_pXFAApp->LoadFWLTheme(m_pXFADoc.get())) { - m_pXFADoc.reset(); FXSYS_SetLastError(FPDF_ERR_XFALAYOUT); return false; } @@ -150,16 +151,19 @@ else m_FormType = FormType::kXFAForeground; + AutoNuller<UnownedPtr<CXFA_FFDocView>> view_nuller(&m_pXFADocView); m_pXFADocView = m_pXFADoc->CreateDocView(); + if (m_pXFADocView->StartLayout() < 0) { - m_pXFADocView = nullptr; - m_pXFADoc.reset(); FXSYS_SetLastError(FPDF_ERR_XFALAYOUT); return false; } m_pXFADocView->DoLayout(); m_pXFADocView->StopLayout(); + + view_nuller.AbandonNullification(); + doc_nuller.AbandonNullification(); m_nLoadStatus = FXFA_LOADSTATUS_LOADED; return true; }