summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authortsepez <tsepez@chromium.org>2016-12-01 08:29:25 -0800
committerCommit bot <commit-bot@chromium.org>2016-12-01 08:29:25 -0800
commit02759102cf998c9e937b3b65b64ed6b4c3b104bc (patch)
treea84ba0b347fb539be17b35a0b1f84acb63ad54b3
parentc62980ec7539fa5ae2065ba5f287aada3a814173 (diff)
downloadpdfium-02759102cf998c9e937b3b65b64ed6b4c3b104bc.tar.xz
Protect against unexpected library create/destroy
Probably won't fix bug 669797 on its own, but nice to have. Remove unimplemented static method. Review-Url: https://codereview.chromium.org/2543833002
-rw-r--r--BUILD.gn1
-rw-r--r--core/fpdfapi/cpdf_modulemgr.h1
-rw-r--r--fpdfsdk/fpdfview.cpp12
-rw-r--r--fpdfsdk/fpdfview_unittest.cpp20
4 files changed, 31 insertions, 3 deletions
diff --git a/BUILD.gn b/BUILD.gn
index 46768fc1a1..87368e2b56 100644
--- a/BUILD.gn
+++ b/BUILD.gn
@@ -1734,6 +1734,7 @@ test("pdfium_unittests") {
"core/fxge/dib/fx_dib_engine_unittest.cpp",
"fpdfsdk/fpdfdoc_unittest.cpp",
"fpdfsdk/fpdfeditimg_unittest.cpp",
+ "fpdfsdk/fpdfview_unittest.cpp",
]
deps = [
":pdfium",
diff --git a/core/fpdfapi/cpdf_modulemgr.h b/core/fpdfapi/cpdf_modulemgr.h
index 57c266619e..d31ffd5256 100644
--- a/core/fpdfapi/cpdf_modulemgr.h
+++ b/core/fpdfapi/cpdf_modulemgr.h
@@ -35,7 +35,6 @@ class CFSDK_UnsupportInfo_Adapter {
class CPDF_ModuleMgr {
public:
static CPDF_ModuleMgr* Get();
- static void Create();
static void Destroy();
static const int kFileBufSize = 512;
diff --git a/fpdfsdk/fpdfview.cpp b/fpdfsdk/fpdfview.cpp
index 1c27b6c69b..633cbe879e 100644
--- a/fpdfsdk/fpdfview.cpp
+++ b/fpdfsdk/fpdfview.cpp
@@ -50,6 +50,9 @@
namespace {
+// Also indicates whether library is currently initialized.
+CCodec_ModuleMgr* g_pCodecModule = nullptr;
+
void RenderPageImpl(CPDF_PageRenderContext* pContext,
CPDF_Page* pPage,
const CFX_Matrix& matrix,
@@ -295,18 +298,20 @@ FPDF_BOOL FSDK_IsSandBoxPolicyEnabled(FPDF_DWORD policy) {
}
}
-CCodec_ModuleMgr* g_pCodecModule = nullptr;
-
DLLEXPORT void STDCALL FPDF_InitLibrary() {
FPDF_InitLibraryWithConfig(nullptr);
}
DLLEXPORT void STDCALL
FPDF_InitLibraryWithConfig(const FPDF_LIBRARY_CONFIG* cfg) {
+ if (g_pCodecModule)
+ return;
+
g_pCodecModule = new CCodec_ModuleMgr();
CFX_GEModule* pModule = CFX_GEModule::Get();
pModule->Init(cfg ? cfg->m_pUserFontPaths : nullptr, g_pCodecModule);
+
CPDF_ModuleMgr* pModuleMgr = CPDF_ModuleMgr::Get();
pModuleMgr->SetCodecModule(g_pCodecModule);
pModuleMgr->InitPageModule();
@@ -324,6 +329,9 @@ FPDF_InitLibraryWithConfig(const FPDF_LIBRARY_CONFIG* cfg) {
}
DLLEXPORT void STDCALL FPDF_DestroyLibrary() {
+ if (!g_pCodecModule)
+ return;
+
#ifdef PDF_ENABLE_XFA
BC_Library_Destory();
FXJSE_Finalize();
diff --git a/fpdfsdk/fpdfview_unittest.cpp b/fpdfsdk/fpdfview_unittest.cpp
new file mode 100644
index 0000000000..27680b3d4e
--- /dev/null
+++ b/fpdfsdk/fpdfview_unittest.cpp
@@ -0,0 +1,20 @@
+// Copyright 2016 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "public/fpdfview.h"
+
+#include "testing/gtest/include/gtest/gtest.h"
+#include "testing/test_support.h"
+
+TEST(FPDFView, DoubleInit) {
+ FPDF_InitLibrary();
+ FPDF_InitLibrary();
+ FPDF_DestroyLibrary();
+}
+
+TEST(FPDFView, DoubleDestroy) {
+ FPDF_InitLibrary();
+ FPDF_DestroyLibrary();
+ FPDF_DestroyLibrary();
+}