Add a null pointer check to CPDF_CalRGB::v_Load().
[pdfium.git] / core / src / fpdfapi / fpdf_basic_module.cpp
1 // Copyright 2014 PDFium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
6
7 #include "../../include/fxcodec/fx_codec.h"
8 #include "../../include/fpdfapi/fpdf_module.h"
9
10 namespace {
11
12 CPDF_ModuleMgr* g_FPDFAPI_pDefaultMgr = nullptr;
13
14 const char kAddinNameCJK[] = "Eastern Asian Language Support";
15
16 }  // namespace
17
18 // static
19 CPDF_ModuleMgr* CPDF_ModuleMgr::Get()
20 {
21     return g_FPDFAPI_pDefaultMgr;
22 }
23
24 // static
25 void CPDF_ModuleMgr::Create()
26 {
27     ASSERT(!g_FPDFAPI_pDefaultMgr);
28     g_FPDFAPI_pDefaultMgr = new CPDF_ModuleMgr;
29 }
30
31 // static
32 void CPDF_ModuleMgr::Destroy()
33 {
34     delete g_FPDFAPI_pDefaultMgr;
35     g_FPDFAPI_pDefaultMgr = nullptr;
36 }
37
38 CPDF_ModuleMgr::CPDF_ModuleMgr()
39     : m_pCodecModule(nullptr)
40 {
41 }
42
43 CPDF_ModuleMgr::~CPDF_ModuleMgr()
44 {
45 }
46
47 void CPDF_ModuleMgr::SetDownloadCallback(FX_BOOL (*callback)(const FX_CHAR* module_name))
48 {
49     m_pDownloadCallback = callback;
50 }
51 FX_BOOL CPDF_ModuleMgr::DownloadModule(const FX_CHAR* module_name)
52 {
53     if (m_pDownloadCallback == NULL) {
54         return FALSE;
55     }
56     return m_pDownloadCallback(module_name);
57 }
58 void CPDF_ModuleMgr::NotifyModuleAvailable(const FX_CHAR* module_name)
59 {
60     if (FXSYS_strcmp(module_name, kAddinNameCJK) == 0) {
61         m_pPageModule->NotifyCJKAvailable();
62     }
63 }
64 void CPDF_ModuleMgr::RegisterSecurityHandler(const FX_CHAR* filter, CPDF_SecurityHandler * (*CreateHandler)(void* param), void* param)
65 {
66     if (CreateHandler == NULL) {
67         m_SecurityHandlerMap.RemoveKey(filter);
68     } else {
69         m_SecurityHandlerMap.SetAt(filter, (void*)CreateHandler);
70     }
71     if (param) {
72         m_SecurityHandlerMap.SetAt(FX_BSTRC("_param_") + filter, param);
73     }
74 }
75 void CPDF_ModuleMgr::SetPrivateData(void* module_id, void* pData, PD_CALLBACK_FREEDATA callback)
76 {
77     m_privateData.SetPrivateData(module_id, pData, callback);
78 }
79 void* CPDF_ModuleMgr::GetPrivateData(void* module_id)
80 {
81     return m_privateData.GetPrivateData(module_id);
82 }
83 CPDF_SecurityHandler* CPDF_ModuleMgr::CreateSecurityHandler(const FX_CHAR* filter)
84 {
85     CPDF_SecurityHandler* (*CreateHandler)(void*) = NULL;
86     if (!m_SecurityHandlerMap.Lookup(filter, (void*&)CreateHandler)) {
87         return NULL;
88     }
89     if (CreateHandler == NULL) {
90         return NULL;
91     }
92     void* param = NULL;
93     m_SecurityHandlerMap.Lookup(FX_BSTRC("_param_") + filter, param);
94     return CreateHandler(param);
95 }
96 ICodec_FaxModule* CPDF_ModuleMgr::GetFaxModule()
97 {
98     return m_pCodecModule ? m_pCodecModule->GetFaxModule() : NULL;
99 }
100 ICodec_JpegModule* CPDF_ModuleMgr::GetJpegModule()
101 {
102     return m_pCodecModule ? m_pCodecModule->GetJpegModule() : NULL;
103 }
104 ICodec_JpxModule* CPDF_ModuleMgr::GetJpxModule()
105 {
106     return m_pCodecModule ? m_pCodecModule->GetJpxModule() : NULL;
107 }
108 ICodec_Jbig2Module* CPDF_ModuleMgr::GetJbig2Module()
109 {
110     return m_pCodecModule ? m_pCodecModule->GetJbig2Module() : NULL;
111 }
112 ICodec_IccModule* CPDF_ModuleMgr::GetIccModule()
113 {
114     return m_pCodecModule ? m_pCodecModule->GetIccModule() : NULL;
115 }
116 ICodec_FlateModule* CPDF_ModuleMgr::GetFlateModule()
117 {
118     return m_pCodecModule ? m_pCodecModule->GetFlateModule() : NULL;
119 }