summaryrefslogtreecommitdiff
path: root/xfa/fxfa/cxfa_fwltheme.cpp
diff options
context:
space:
mode:
authorRyan Harrison <rharrison@chromium.org>2018-04-25 18:49:21 +0000
committerChromium commit bot <commit-bot@chromium.org>2018-04-25 18:49:21 +0000
commiteb3ec8f29846a5df67269a53ca94d1d740c84513 (patch)
tree4a3717eb9fa56ff3e0c2b529aa4696fefa14fe42 /xfa/fxfa/cxfa_fwltheme.cpp
parent2929d135d076fb6927a02ff94935d5efc45e7257 (diff)
downloadpdfium-eb3ec8f29846a5df67269a53ca94d1d740c84513.tar.xz
Allow failing to build CFXA_FWLTheme if unable to load fonts
The current implementation of this class potentially does a lot of work in the constructor. Specifically when getting a calendar font it might cause the whole font loading pipeline to run. This can fail if it is unable to load fonts. Breaking out the font loading part, so that the factory method can return nullptr if it fails. Additionally adding a guard for the case the font manager fails to load, which is the root cause of the crash in the bug. BUG=chromium:835608 Change-Id: I05b987aaad6f0814907066904331610a7fbb7f70 Reviewed-on: https://pdfium-review.googlesource.com/31330 Commit-Queue: Ryan Harrison <rharrison@chromium.org> Reviewed-by: Henrique Nakashima <hnakashima@chromium.org>
Diffstat (limited to 'xfa/fxfa/cxfa_fwltheme.cpp')
-rw-r--r--xfa/fxfa/cxfa_fwltheme.cpp12
1 files changed, 9 insertions, 3 deletions
diff --git a/xfa/fxfa/cxfa_fwltheme.cpp b/xfa/fxfa/cxfa_fwltheme.cpp
index 0f41052d3b..22e091ee12 100644
--- a/xfa/fxfa/cxfa_fwltheme.cpp
+++ b/xfa/fxfa/cxfa_fwltheme.cpp
@@ -60,18 +60,24 @@ CXFA_FWLTheme::CXFA_FWLTheme(CXFA_FFApp* pApp)
m_pCalendarFont(nullptr),
m_pApp(pApp) {
m_Rect.Reset();
+}
+bool CXFA_FWLTheme::LoadCalendarFont() {
for (size_t i = 0; !m_pCalendarFont && i < FX_ArraySize(g_FWLTheme_CalFonts);
++i) {
m_pCalendarFont = CFGAS_GEFont::LoadFont(g_FWLTheme_CalFonts[i], 0, 0,
m_pApp->GetFDEFontMgr());
}
+
if (!m_pCalendarFont) {
- m_pCalendarFont = m_pApp->GetFDEFontMgr()->GetFontByCodePage(
- FX_CODEPAGE_MSWin_WesternEuropean, 0, nullptr);
+ CFGAS_FontMgr* font_mgr = m_pApp->GetFDEFontMgr();
+ if (font_mgr) {
+ m_pCalendarFont = font_mgr->GetFontByCodePage(
+ FX_CODEPAGE_MSWin_WesternEuropean, 0, nullptr);
+ }
}
- ASSERT(m_pCalendarFont);
+ return m_pCalendarFont != nullptr;
}
CXFA_FWLTheme::~CXFA_FWLTheme() {