0

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: Tom Sepez <tsepez@chromium.org>
Cr-Commit-Position: refs/heads/master@{#833068}
This commit is contained in:
Daniel Hosseinian
2020-12-03 00:50:48 +00:00
committed by Chromium LUCI CQ
parent c9e8e130c7
commit bf0cba7c9c
2 changed files with 6 additions and 6 deletions

@ -259,6 +259,8 @@ STATIC_ASSERT_ENUM(PP_PRIVATEDUPLEXMODE_SIMPLEX, Simplex);
STATIC_ASSERT_ENUM(PP_PRIVATEDUPLEXMODE_SHORT_EDGE, DuplexFlipShortEdge);
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_STROKE, FPDF_TEXTRENDERMODE_STROKE);
STATIC_ASSERT_ENUM(PP_TEXTRENDERINGMODE_FILLSTROKE,
@ -272,6 +274,7 @@ STATIC_ASSERT_ENUM(PP_TEXTRENDERINGMODE_STROKECLIP,
STATIC_ASSERT_ENUM(PP_TEXTRENDERINGMODE_FILLSTROKECLIP,
FPDF_TEXTRENDERMODE_FILL_STROKE_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::kAcroForm,

@ -396,12 +396,9 @@ void PDFiumPage::CalculateTextRunStyleInfo(
}
int render_mode = FPDFText_GetTextRenderMode(text_page, char_index);
if (render_mode < PP_TEXTRENDERINGMODE_FIRST ||
render_mode > PP_TEXTRENDERINGMODE_LAST) {
style_info->render_mode = PP_TEXTRENDERINGMODE_UNKNOWN;
} else {
style_info->render_mode = static_cast<PP_TextRenderingMode>(render_mode);
}
DCHECK_GE(render_mode, PP_TEXTRENDERINGMODE_FIRST);
DCHECK_LE(render_mode, PP_TEXTRENDERINGMODE_LAST);
style_info->render_mode = static_cast<PP_TextRenderingMode>(render_mode);
}
bool PDFiumPage::AreTextStyleEqual(