Fix CPDF_ICCBasedCS::GetDefaultValue heap-buffer-overflow.
[pdfium.git] / core / src / fpdfapi / fpdf_basic_module.cpp
index d564bdb..03cfd66 100644 (file)
@@ -1,75 +1,67 @@
 // Copyright 2014 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.
+
 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
 
 #include "../../include/fxcodec/fx_codec.h"
 #include "../../include/fpdfapi/fpdf_module.h"
-static CPDF_ModuleMgr* g_FPDFAPI_pDefaultMgr = NULL;
+
+namespace {
+
+CPDF_ModuleMgr* g_FPDFAPI_pDefaultMgr = nullptr;
+
+const char kAddinNameCJK[] = "Eastern Asian Language Support";
+
+}  // namespace
+
+// static
 CPDF_ModuleMgr* CPDF_ModuleMgr::Get()
 {
     return g_FPDFAPI_pDefaultMgr;
 }
+
+// static
 void CPDF_ModuleMgr::Create()
 {
+    ASSERT(!g_FPDFAPI_pDefaultMgr);
     g_FPDFAPI_pDefaultMgr = new CPDF_ModuleMgr;
-    g_FPDFAPI_pDefaultMgr->Initialize();
 }
+
+// static
 void CPDF_ModuleMgr::Destroy()
 {
-    if (g_FPDFAPI_pDefaultMgr) {
-        delete g_FPDFAPI_pDefaultMgr;
-    }
-    g_FPDFAPI_pDefaultMgr = NULL;
+    delete g_FPDFAPI_pDefaultMgr;
+    g_FPDFAPI_pDefaultMgr = nullptr;
 }
+
 CPDF_ModuleMgr::CPDF_ModuleMgr()
+    : m_pCodecModule(nullptr)
 {
-    m_pCodecModule = NULL;
-    m_pPageModule = NULL;
-    m_pRenderModule = NULL;
-    m_FileBufSize = 512;
-}
-void CPDF_ModuleMgr::Initialize()
-{
-    InitModules();
-    m_FileBufSize = 512;
-}
-void CPDF_ModuleMgr::InitModules()
-{
-    m_pCodecModule = NULL;
-    m_pPageModule = new CPDF_PageModuleDef;
-    m_pRenderModule = new CPDF_RenderModuleDef;
 }
+
 CPDF_ModuleMgr::~CPDF_ModuleMgr()
 {
-    if (m_pPageModule) {
-        delete m_pPageModule;
-    }
-    if (m_pRenderModule) {
-        delete m_pRenderModule;
-    }
 }
-void CPDF_ModuleMgr::SetDownloadCallback(FX_BOOL (*callback)(FX_LPCSTR module_name))
+
+void CPDF_ModuleMgr::SetDownloadCallback(FX_BOOL (*callback)(const FX_CHAR* module_name))
 {
     m_pDownloadCallback = callback;
 }
-FX_BOOL CPDF_ModuleMgr::DownloadModule(FX_LPCSTR module_name)
+FX_BOOL CPDF_ModuleMgr::DownloadModule(const FX_CHAR* module_name)
 {
     if (m_pDownloadCallback == NULL) {
         return FALSE;
     }
     return m_pDownloadCallback(module_name);
 }
-void CPDF_ModuleMgr::NotifyModuleAvailable(FX_LPCSTR module_name)
+void CPDF_ModuleMgr::NotifyModuleAvailable(const FX_CHAR* module_name)
 {
-    if (FXSYS_strcmp(module_name, ADDIN_NAME_CJK) == 0) {
+    if (FXSYS_strcmp(module_name, kAddinNameCJK) == 0) {
         m_pPageModule->NotifyCJKAvailable();
-    } else if (FXSYS_strcmp(module_name, ADDIN_NAME_DECODER) == 0) {
-        m_pRenderModule->NotifyDecoderAvailable();
     }
 }
-void CPDF_ModuleMgr::RegisterSecurityHandler(FX_LPCSTR filter, CPDF_SecurityHandler * (*CreateHandler)(void* param), void* param)
+void CPDF_ModuleMgr::RegisterSecurityHandler(const FX_CHAR* filter, CPDF_SecurityHandler * (*CreateHandler)(void* param), void* param)
 {
     if (CreateHandler == NULL) {
         m_SecurityHandlerMap.RemoveKey(filter);
@@ -80,15 +72,15 @@ void CPDF_ModuleMgr::RegisterSecurityHandler(FX_LPCSTR filter, CPDF_SecurityHand
         m_SecurityHandlerMap.SetAt(FX_BSTRC("_param_") + filter, param);
     }
 }
-void CPDF_ModuleMgr::SetPrivateData(FX_LPVOID module_id, FX_LPVOID pData, PD_CALLBACK_FREEDATA callback)
+void CPDF_ModuleMgr::SetPrivateData(void* module_id, void* pData, PD_CALLBACK_FREEDATA callback)
 {
     m_privateData.SetPrivateData(module_id, pData, callback);
 }
-FX_LPVOID CPDF_ModuleMgr::GetPrivateData(FX_LPVOID module_id)
+void* CPDF_ModuleMgr::GetPrivateData(void* module_id)
 {
     return m_privateData.GetPrivateData(module_id);
 }
-CPDF_SecurityHandler* CPDF_ModuleMgr::CreateSecurityHandler(FX_LPCSTR filter)
+CPDF_SecurityHandler* CPDF_ModuleMgr::CreateSecurityHandler(const FX_CHAR* filter)
 {
     CPDF_SecurityHandler* (*CreateHandler)(void*) = NULL;
     if (!m_SecurityHandlerMap.Lookup(filter, (void*&)CreateHandler)) {