| Index: fpdfsdk/fpdfview.cpp
|
| diff --git a/fpdfsdk/fpdfview.cpp b/fpdfsdk/fpdfview.cpp
|
| index 29fe88d9431b49028b5d70af09b8e5cdecc95447..0c3a95d0946e7cf45793e61bae7ac2ae08129f86 100644
|
| --- a/fpdfsdk/fpdfview.cpp
|
| +++ b/fpdfsdk/fpdfview.cpp
|
| @@ -66,8 +66,8 @@ CPDF_Document* CPDFDocumentFromFPDFDocument(FPDF_DOCUMENT doc) {
|
|
|
| FPDF_DOCUMENT FPDFDocumentFromCPDFDocument(CPDF_Document* doc) {
|
| #ifdef PDF_ENABLE_XFA
|
| - return doc ? FPDFDocumentFromUnderlying(
|
| - new CPDFXFA_Document(doc, CPDFXFA_App::GetInstance()))
|
| + return doc ? FPDFDocumentFromUnderlying(new CPDFXFA_Document(
|
| + WrapUnique(doc), CPDFXFA_App::GetInstance()))
|
| : nullptr;
|
| #else // PDF_ENABLE_XFA
|
| return FPDFDocumentFromUnderlying(doc);
|
| @@ -365,22 +365,17 @@ DLLEXPORT FPDF_DOCUMENT STDCALL FPDF_LoadDocument(FPDF_STRING file_path,
|
| std::unique_ptr<CPDF_Parser> pParser(new CPDF_Parser);
|
| pParser->SetPassword(password);
|
|
|
| - std::unique_ptr<CPDF_Document> pDocument(new CPDF_Document(pParser.get()));
|
| - CPDF_Parser::Error error =
|
| - pParser->StartParse(pFileAccess, std::move(pDocument));
|
| + std::unique_ptr<CPDF_Document> pDocument(
|
| + new CPDF_Document(std::move(pParser)));
|
| + CPDF_Parser::Error error = pParser->StartParse(pFileAccess, pDocument.get());
|
| if (error != CPDF_Parser::SUCCESS) {
|
| ProcessParseError(error);
|
| return nullptr;
|
| }
|
| #ifdef PDF_ENABLE_XFA
|
| - CPDF_Document* pPDFDoc = pParser.release()->GetDocument();
|
| - if (!pPDFDoc)
|
| - return nullptr;
|
| -
|
| - CPDFXFA_App* pProvider = CPDFXFA_App::GetInstance();
|
| - return new CPDFXFA_Document(pPDFDoc, pProvider);
|
| + return new CPDFXFA_Document(std::move(pDocument), CPDFXFA_App::GetInstance());
|
| #else // PDF_ENABLE_XFA
|
| - return pParser.release()->GetDocument();
|
| + return pDocument.release();
|
| #endif // PDF_ENABLE_XFA
|
| }
|
|
|
| @@ -451,15 +446,16 @@ DLLEXPORT FPDF_DOCUMENT STDCALL FPDF_LoadMemDocument(const void* data_buf,
|
| std::unique_ptr<CPDF_Parser> pParser(new CPDF_Parser);
|
| pParser->SetPassword(password);
|
|
|
| - std::unique_ptr<CPDF_Document> pDocument(new CPDF_Document(pParser.get()));
|
| + std::unique_ptr<CPDF_Document> pDocument(
|
| + new CPDF_Document(std::move(pParser)));
|
| CPDF_Parser::Error error =
|
| - pParser->StartParse(pMemFile, std::move(pDocument));
|
| + pDocument->GetParser()->StartParse(pMemFile, pDocument.get());
|
| if (error != CPDF_Parser::SUCCESS) {
|
| ProcessParseError(error);
|
| return nullptr;
|
| }
|
| - CheckUnSupportError(pParser->GetDocument(), error);
|
| - return FPDFDocumentFromCPDFDocument(pParser.release()->GetDocument());
|
| + CheckUnSupportError(pDocument.get(), error);
|
| + return FPDFDocumentFromCPDFDocument(pDocument.release());
|
| }
|
|
|
| DLLEXPORT FPDF_DOCUMENT STDCALL
|
| @@ -469,14 +465,16 @@ FPDF_LoadCustomDocument(FPDF_FILEACCESS* pFileAccess,
|
| std::unique_ptr<CPDF_Parser> pParser(new CPDF_Parser);
|
| pParser->SetPassword(password);
|
|
|
| - std::unique_ptr<CPDF_Document> pDocument(new CPDF_Document(pParser.get()));
|
| - CPDF_Parser::Error error = pParser->StartParse(pFile, std::move(pDocument));
|
| + std::unique_ptr<CPDF_Document> pDocument(
|
| + new CPDF_Document(std::move(pParser)));
|
| + CPDF_Parser::Error error =
|
| + pDocument->GetParser()->StartParse(pFile, pDocument.get());
|
| if (error != CPDF_Parser::SUCCESS) {
|
| ProcessParseError(error);
|
| return nullptr;
|
| }
|
| - CheckUnSupportError(pParser->GetDocument(), error);
|
| - return FPDFDocumentFromCPDFDocument(pParser.release()->GetDocument());
|
| + CheckUnSupportError(pDocument.get(), error);
|
| + return FPDFDocumentFromCPDFDocument(pDocument.release());
|
| }
|
|
|
| DLLEXPORT FPDF_BOOL STDCALL FPDF_GetFileVersion(FPDF_DOCUMENT doc,
|
| @@ -683,19 +681,7 @@ DLLEXPORT void STDCALL FPDF_ClosePage(FPDF_PAGE page) {
|
| }
|
|
|
| DLLEXPORT void STDCALL FPDF_CloseDocument(FPDF_DOCUMENT document) {
|
| -#ifdef PDF_ENABLE_XFA
|
| delete UnderlyingFromFPDFDocument(document);
|
| -#else // PDF_ENABLE_XFA
|
| - CPDF_Document* pDoc = CPDFDocumentFromFPDFDocument(document);
|
| - if (!pDoc)
|
| - return;
|
| - CPDF_Parser* pParser = pDoc->GetParser();
|
| - if (!pParser) {
|
| - delete pDoc;
|
| - return;
|
| - }
|
| - delete pParser;
|
| -#endif // PDF_ENABLE_XFA
|
| }
|
|
|
| DLLEXPORT unsigned long STDCALL FPDF_GetLastError() {
|
|
|