Commit bf0cba7c authored by Daniel Hosseinian's avatar Daniel Hosseinian Committed by Chromium LUCI CQ

Static assert bounds of PP_TextRenderingMode and FPDF_TEXT_RENDERMODE

PDFium's FPDFText_GetTextRenderMode() is technically an experimental
API, but it guarantees to return enum values within a certain range. By
statically asserting the bounds of FPDF_TEXT_RENDERMODE, we can simply
DCHECK the returned value of FPDFText_GetTextRenderMode() against those
bounds instead of handling an out-of-bounds value in runtime.

Change-Id: I89d377eeaaab5186712e6b85683bf658590eab53
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2567452
Commit-Queue: Daniel Hosseinian <dhoss@chromium.org>
Reviewed-by: default avatarTom Sepez <tsepez@chromium.org>
Cr-Commit-Position: refs/heads/master@{#833068}
parent c9e8e130
...@@ -259,6 +259,8 @@ STATIC_ASSERT_ENUM(PP_PRIVATEDUPLEXMODE_SIMPLEX, Simplex); ...@@ -259,6 +259,8 @@ STATIC_ASSERT_ENUM(PP_PRIVATEDUPLEXMODE_SIMPLEX, Simplex);
STATIC_ASSERT_ENUM(PP_PRIVATEDUPLEXMODE_SHORT_EDGE, DuplexFlipShortEdge); STATIC_ASSERT_ENUM(PP_PRIVATEDUPLEXMODE_SHORT_EDGE, DuplexFlipShortEdge);
STATIC_ASSERT_ENUM(PP_PRIVATEDUPLEXMODE_LONG_EDGE, DuplexFlipLongEdge); STATIC_ASSERT_ENUM(PP_PRIVATEDUPLEXMODE_LONG_EDGE, DuplexFlipLongEdge);
STATIC_ASSERT_ENUM(PP_TEXTRENDERINGMODE_UNKNOWN, FPDF_TEXTRENDERMODE_UNKNOWN);
STATIC_ASSERT_ENUM(PP_TEXTRENDERINGMODE_FIRST, FPDF_TEXTRENDERMODE_UNKNOWN);
STATIC_ASSERT_ENUM(PP_TEXTRENDERINGMODE_FILL, FPDF_TEXTRENDERMODE_FILL); STATIC_ASSERT_ENUM(PP_TEXTRENDERINGMODE_FILL, FPDF_TEXTRENDERMODE_FILL);
STATIC_ASSERT_ENUM(PP_TEXTRENDERINGMODE_STROKE, FPDF_TEXTRENDERMODE_STROKE); STATIC_ASSERT_ENUM(PP_TEXTRENDERINGMODE_STROKE, FPDF_TEXTRENDERMODE_STROKE);
STATIC_ASSERT_ENUM(PP_TEXTRENDERINGMODE_FILLSTROKE, STATIC_ASSERT_ENUM(PP_TEXTRENDERINGMODE_FILLSTROKE,
...@@ -272,6 +274,7 @@ STATIC_ASSERT_ENUM(PP_TEXTRENDERINGMODE_STROKECLIP, ...@@ -272,6 +274,7 @@ STATIC_ASSERT_ENUM(PP_TEXTRENDERINGMODE_STROKECLIP,
STATIC_ASSERT_ENUM(PP_TEXTRENDERINGMODE_FILLSTROKECLIP, STATIC_ASSERT_ENUM(PP_TEXTRENDERINGMODE_FILLSTROKECLIP,
FPDF_TEXTRENDERMODE_FILL_STROKE_CLIP); FPDF_TEXTRENDERMODE_FILL_STROKE_CLIP);
STATIC_ASSERT_ENUM(PP_TEXTRENDERINGMODE_CLIP, FPDF_TEXTRENDERMODE_CLIP); STATIC_ASSERT_ENUM(PP_TEXTRENDERINGMODE_CLIP, FPDF_TEXTRENDERMODE_CLIP);
STATIC_ASSERT_ENUM(PP_TEXTRENDERINGMODE_LAST, FPDF_TEXTRENDERMODE_LAST);
STATIC_ASSERT_ENUM(chrome_pdf::PDFEngine::FormType::kNone, FORMTYPE_NONE); STATIC_ASSERT_ENUM(chrome_pdf::PDFEngine::FormType::kNone, FORMTYPE_NONE);
STATIC_ASSERT_ENUM(chrome_pdf::PDFEngine::FormType::kAcroForm, STATIC_ASSERT_ENUM(chrome_pdf::PDFEngine::FormType::kAcroForm,
......
...@@ -396,12 +396,9 @@ void PDFiumPage::CalculateTextRunStyleInfo( ...@@ -396,12 +396,9 @@ void PDFiumPage::CalculateTextRunStyleInfo(
} }
int render_mode = FPDFText_GetTextRenderMode(text_page, char_index); int render_mode = FPDFText_GetTextRenderMode(text_page, char_index);
if (render_mode < PP_TEXTRENDERINGMODE_FIRST || DCHECK_GE(render_mode, PP_TEXTRENDERINGMODE_FIRST);
render_mode > PP_TEXTRENDERINGMODE_LAST) { DCHECK_LE(render_mode, PP_TEXTRENDERINGMODE_LAST);
style_info->render_mode = PP_TEXTRENDERINGMODE_UNKNOWN; style_info->render_mode = static_cast<PP_TextRenderingMode>(render_mode);
} else {
style_info->render_mode = static_cast<PP_TextRenderingMode>(render_mode);
}
} }
bool PDFiumPage::AreTextStyleEqual( bool PDFiumPage::AreTextStyleEqual(
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment