CPDF_Parser shouldnt be in the business of opening files
authorTom Sepez <tsepez@chromium.org>
Wed, 5 Aug 2015 17:39:02 +0000 (10:39 -0700)
committerTom Sepez <tsepez@chromium.org>
Wed, 5 Aug 2015 17:39:02 +0000 (10:39 -0700)
Move that operation closer to the embedder's call.

R=thestig@chromium.org

Review URL: https://codereview.chromium.org/1269073003 .

core/include/fpdfapi/fpdf_parser.h
core/src/fpdfapi/fpdf_parser/fpdf_parser_parser.cpp
fpdfsdk/src/fpdfview.cpp

index f80bb24..7640c85 100644 (file)
@@ -355,8 +355,6 @@ class CPDF_Parser {
   CPDF_Parser();
   ~CPDF_Parser();
 
-  FX_DWORD StartParse(const FX_CHAR* filename, FX_BOOL bReParse = FALSE);
-  FX_DWORD StartParse(const FX_WCHAR* filename, FX_BOOL bReParse = FALSE);
   FX_DWORD StartParse(IFX_FileRead* pFile,
                       FX_BOOL bReParse = FALSE,
                       FX_BOOL bOwnFileRead = TRUE);
index d0d4493..e9c07e2 100644 (file)
@@ -116,20 +116,6 @@ static int32_t GetHeaderOffset(IFX_FileRead* pFile) {
   }
   return -1;
 }
-FX_DWORD CPDF_Parser::StartParse(const FX_CHAR* filename, FX_BOOL bReParse) {
-  IFX_FileRead* pFileAccess = FX_CreateFileRead(filename);
-  if (!pFileAccess) {
-    return PDFPARSE_ERROR_FILE;
-  }
-  return StartParse(pFileAccess, bReParse);
-}
-FX_DWORD CPDF_Parser::StartParse(const FX_WCHAR* filename, FX_BOOL bReParse) {
-  IFX_FileRead* pFileAccess = FX_CreateFileRead(filename);
-  if (!pFileAccess) {
-    return PDFPARSE_ERROR_FILE;
-  }
-  return StartParse(pFileAccess, bReParse);
-}
 CPDF_SecurityHandler* FPDF_CreateStandardSecurityHandler();
 CPDF_SecurityHandler* FPDF_CreatePubKeyHandler(void*);
 FX_DWORD CPDF_Parser::StartParse(IFX_FileRead* pFileAccess,
index a419749..8895dce 100644 (file)
@@ -155,12 +155,20 @@ DLLEXPORT void STDCALL FPDF_SetSandBoxPolicy(FPDF_DWORD policy,
   return FSDK_SetSandBoxPolicy(policy, enable);
 }
 
+
 DLLEXPORT FPDF_DOCUMENT STDCALL FPDF_LoadDocument(FPDF_STRING file_path,
                                                   FPDF_BYTESTRING password) {
+  // NOTE: the creation of the file needs to be by the embedder on the
+  // other side of this API.
+  IFX_FileRead* pFileAccess = FX_CreateFileRead((const FX_CHAR*)file_path);
+  if (!pFileAccess) {
+    return nullptr;
+  }
+
   CPDF_Parser* pParser = new CPDF_Parser;
   pParser->SetPassword(password);
 
-  FX_DWORD err_code = pParser->StartParse((const FX_CHAR*)file_path);
+  FX_DWORD err_code = pParser->StartParse(pFileAccess);
   if (err_code) {
     delete pParser;
     ProcessParseError(err_code);