Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(378)

Side by Side Diff: fpdfsdk/fpdfview.cpp

Issue 2543833002: Protect against unexpected library create/destroy (Closed)
Patch Set: Add unittest Created 4 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « core/fpdfapi/cpdf_modulemgr.h ('k') | fpdfsdk/fpdfview_unittest.cpp » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2014 PDFium Authors. All rights reserved. 1 // Copyright 2014 PDFium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com 5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
6 6
7 #include "public/fpdfview.h" 7 #include "public/fpdfview.h"
8 8
9 #include <memory> 9 #include <memory>
10 #include <utility> 10 #include <utility>
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
43 #include "public/fpdf_formfill.h" 43 #include "public/fpdf_formfill.h"
44 #include "xfa/fxbarcode/BC_Library.h" 44 #include "xfa/fxbarcode/BC_Library.h"
45 #endif // PDF_ENABLE_XFA 45 #endif // PDF_ENABLE_XFA
46 46
47 #if _FXM_PLATFORM_ == _FXM_PLATFORM_WINDOWS_ 47 #if _FXM_PLATFORM_ == _FXM_PLATFORM_WINDOWS_
48 #include "core/fxge/cfx_windowsdevice.h" 48 #include "core/fxge/cfx_windowsdevice.h"
49 #endif 49 #endif
50 50
51 namespace { 51 namespace {
52 52
53 // Also indicates whether library is currently initialized.
54 CCodec_ModuleMgr* g_pCodecModule = nullptr;
55
53 void RenderPageImpl(CPDF_PageRenderContext* pContext, 56 void RenderPageImpl(CPDF_PageRenderContext* pContext,
54 CPDF_Page* pPage, 57 CPDF_Page* pPage,
55 const CFX_Matrix& matrix, 58 const CFX_Matrix& matrix,
56 const FX_RECT& clipping_rect, 59 const FX_RECT& clipping_rect,
57 int flags, 60 int flags,
58 bool bNeedToRestore, 61 bool bNeedToRestore,
59 IFSDK_PAUSE_Adapter* pause) { 62 IFSDK_PAUSE_Adapter* pause) {
60 if (!pContext->m_pOptions) 63 if (!pContext->m_pOptions)
61 pContext->m_pOptions = pdfium::MakeUnique<CPDF_RenderOptions>(); 64 pContext->m_pOptions = pdfium::MakeUnique<CPDF_RenderOptions>();
62 65
(...skipping 225 matching lines...) Expand 10 before | Expand all | Expand 10 after
288 291
289 FPDF_BOOL FSDK_IsSandBoxPolicyEnabled(FPDF_DWORD policy) { 292 FPDF_BOOL FSDK_IsSandBoxPolicyEnabled(FPDF_DWORD policy) {
290 switch (policy) { 293 switch (policy) {
291 case FPDF_POLICY_MACHINETIME_ACCESS: 294 case FPDF_POLICY_MACHINETIME_ACCESS:
292 return !!(foxit_sandbox_policy & 0x01); 295 return !!(foxit_sandbox_policy & 0x01);
293 default: 296 default:
294 return false; 297 return false;
295 } 298 }
296 } 299 }
297 300
298 CCodec_ModuleMgr* g_pCodecModule = nullptr;
299
300 DLLEXPORT void STDCALL FPDF_InitLibrary() { 301 DLLEXPORT void STDCALL FPDF_InitLibrary() {
301 FPDF_InitLibraryWithConfig(nullptr); 302 FPDF_InitLibraryWithConfig(nullptr);
302 } 303 }
303 304
304 DLLEXPORT void STDCALL 305 DLLEXPORT void STDCALL
305 FPDF_InitLibraryWithConfig(const FPDF_LIBRARY_CONFIG* cfg) { 306 FPDF_InitLibraryWithConfig(const FPDF_LIBRARY_CONFIG* cfg) {
307 if (g_pCodecModule)
308 return;
309
306 g_pCodecModule = new CCodec_ModuleMgr(); 310 g_pCodecModule = new CCodec_ModuleMgr();
307 311
308 CFX_GEModule* pModule = CFX_GEModule::Get(); 312 CFX_GEModule* pModule = CFX_GEModule::Get();
309 pModule->Init(cfg ? cfg->m_pUserFontPaths : nullptr, g_pCodecModule); 313 pModule->Init(cfg ? cfg->m_pUserFontPaths : nullptr, g_pCodecModule);
314
310 CPDF_ModuleMgr* pModuleMgr = CPDF_ModuleMgr::Get(); 315 CPDF_ModuleMgr* pModuleMgr = CPDF_ModuleMgr::Get();
311 pModuleMgr->SetCodecModule(g_pCodecModule); 316 pModuleMgr->SetCodecModule(g_pCodecModule);
312 pModuleMgr->InitPageModule(); 317 pModuleMgr->InitPageModule();
313 pModuleMgr->LoadEmbeddedGB1CMaps(); 318 pModuleMgr->LoadEmbeddedGB1CMaps();
314 pModuleMgr->LoadEmbeddedJapan1CMaps(); 319 pModuleMgr->LoadEmbeddedJapan1CMaps();
315 pModuleMgr->LoadEmbeddedCNS1CMaps(); 320 pModuleMgr->LoadEmbeddedCNS1CMaps();
316 pModuleMgr->LoadEmbeddedKorea1CMaps(); 321 pModuleMgr->LoadEmbeddedKorea1CMaps();
317 322
318 #ifdef PDF_ENABLE_XFA 323 #ifdef PDF_ENABLE_XFA
319 FXJSE_Initialize(); 324 FXJSE_Initialize();
320 BC_Library_Init(); 325 BC_Library_Init();
321 #endif // PDF_ENABLE_XFA 326 #endif // PDF_ENABLE_XFA
322 if (cfg && cfg->version >= 2) 327 if (cfg && cfg->version >= 2)
323 IJS_Runtime::Initialize(cfg->m_v8EmbedderSlot, cfg->m_pIsolate); 328 IJS_Runtime::Initialize(cfg->m_v8EmbedderSlot, cfg->m_pIsolate);
324 } 329 }
325 330
326 DLLEXPORT void STDCALL FPDF_DestroyLibrary() { 331 DLLEXPORT void STDCALL FPDF_DestroyLibrary() {
332 if (!g_pCodecModule)
333 return;
334
327 #ifdef PDF_ENABLE_XFA 335 #ifdef PDF_ENABLE_XFA
328 BC_Library_Destory(); 336 BC_Library_Destory();
329 FXJSE_Finalize(); 337 FXJSE_Finalize();
330 #endif // PDF_ENABLE_XFA 338 #endif // PDF_ENABLE_XFA
331 339
332 CPDF_ModuleMgr::Destroy(); 340 CPDF_ModuleMgr::Destroy();
333 CFX_GEModule::Destroy(); 341 CFX_GEModule::Destroy();
334 342
335 delete g_pCodecModule; 343 delete g_pCodecModule;
336 g_pCodecModule = nullptr; 344 g_pCodecModule = nullptr;
(...skipping 832 matching lines...) Expand 10 before | Expand all | Expand 10 after
1169 if (!buffer) { 1177 if (!buffer) {
1170 *buflen = len; 1178 *buflen = len;
1171 } else if (len <= *buflen) { 1179 } else if (len <= *buflen) {
1172 memcpy(buffer, utf16Name.c_str(), len); 1180 memcpy(buffer, utf16Name.c_str(), len);
1173 *buflen = len; 1181 *buflen = len;
1174 } else { 1182 } else {
1175 *buflen = -1; 1183 *buflen = -1;
1176 } 1184 }
1177 return (FPDF_DEST)pDestObj; 1185 return (FPDF_DEST)pDestObj;
1178 } 1186 }
OLDNEW
« no previous file with comments | « core/fpdfapi/cpdf_modulemgr.h ('k') | fpdfsdk/fpdfview_unittest.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698